Loading...

BTC Address to donate : [[address]]

Donation of [[value]] BTC Received. Thank You.
[[error]]

zero-cool :: عضو خاص ::
  • شكراً: 66
  • تم شكره 269 مرة في 63 مشاركة

السلام عليكم ورحمة الله وبركاته


إن شاء الله تكونوا في تمام الصحة والعافية إخواني




عادة ، ستجد أن \w أو \d إما محددين للغاية أو غير محددين بما يكفي لمطابقة البيانات الدقيقة التي تريد استخراجها.
على سبيل المثال ، ضع في اعتبارك مطابقة سلاسل التاريخ مثل 12/08/99.
يمكنك إنشاء تعبير نمطي "\d\d/\d\d/\d/d" ، لكن هذا سيتطابق أيضًا مع التواريخ غير الصحيحة 99/99/99.
يمكنك بناء مجموعات الرموز الخاصة بك لتتناسب مع ما تحتاجه بالضبط.

يتم إرفاق مجموعات الرموز المخصصة داخل {} مفتوحة أو مغلقة .
يمكنك سرد رموز فردية داخل ال brackets ، أو يمكنك سرد مجموعة من الرموز.

الآن ، دعونا نحاول العثور على تاريخ أفضل يطابق التعبير النمطي.
لننظر في هذا التعبير النمطي:
كود:
r"[01]\d/[0-3]\d/\d\d."
سيتطابق هذا مع أي شيء يبدأ برقم 0 أو متبوعا برقم 0-9 ، ثم / لفصل الشهر عن اليوم.
هذا جيد لأنه ليس لدينا 20 شهرا أو أكثر.
بعد ذلك ، يجب أن يكون هناك رقم بين 0 و 3 ، متبوعًا بأي رقم و /
هذا جيد لأنه ليس لدينا أي شهر مع 40 يوما أو أكثر.
بعد ذلك ، يمكننا الحصول على أي رقمين في عامنا.
عندما نجرب هذا التعبير النمطي ، نجد أنه يلغي التاريخ غير الصحيح ك 77/77/77
هذا التعبير النمطي يلغي أيضا تواريخ مثل 37/41/01 ،15/76/19 ، وهلم جرا.
هذا جيد ، لكنه سيظل متطابقا في تواريخ غير صالحة.
على سبيل المثال ، سيظل يجد تواريخ مثل 14/34/00 أو 00/32/87.
نحن بحاجة لمزيد من القوة!!

يتم استخدام رمز | لإنشاء عبارة OR منطقية.

كود PHP:
>>> refindall("we|my""welcome to my world")
[
'we''my'
إذا كنت تستخدم أقواس قياسية (تسمى capture group) ، فستستخلص العبارة جزءا فقط من السلسلة المطابقة.
انتبه إلى أن "؟:" تغلق هذه الوظيفة وتسمح باستخدام الأقواس لتأسيس ترتيب العمليات بدلاً من استخراج سلسلة فرعية.
إذا كنت تريد التقاط حرف بدل التعبير النمطي السابق ، فسيتعين عليك استخدام non-capture group لتجميع العبارة "or":

كود PHP:
>>> re.findall("(?:we|my)." "welcom to my world")
[
'wel''my '
تخيل أننا نريد مطابقة أشهر صالحة في سلسلة التاريخ.
يمكننا مطابقة الرقم 0 متبوعًا بالرقم 1 إلى 9.
هذا سوف يطابق 01 و 02 و 03 وما إلى ذلك.
لكننا نريد أيضًا مطابقة الرقم 1 متبوعًا بالرقم 0 أو 1 أو 2 (أي 10 و 11 و 12).
إذا كنت ترغب في إنشاء التعبير المنطقي or باستخدام تعبيرات Python النمطية ، فإن بناء الجملة (؟: match1 | match2) يمنحك مرونة هائلة.

يمكن أن يكون عدد أيام الشهر بين 01 و 31.
لذلك ، يمكننا أن نطابق أي رقم يبدأ بـ 0 متبوعا بالرقم 1 إلى 9 أو برقم 1 أو 2 متبوعًا بالرقم 0 إلى 9 أو 3 متبوعا بالرقم 0 أو 1.

الآن ، يمكننا إزالة التواريخ مثل 14/35/12.

دعنا نستخدم هذا لمطابقة الأشهر بين 01 و 12.

كود PHP:
>>> re.findall(r"(0[0-9]|1[0-2])""14/05/88 10/22/99")
[
'05''10'
والأيام من 01 إلى 31.

كود PHP:
>>> re.findall(r"(0[1-9]|[1-2][0-9]|3[0-1])","17/35/89 05/18/99")
[
'17''05''18'
دعونا نضعهم معا:

كود PHP:
>>> re.findall("(?:0[0-9]|[1-2])/(?:0[1-9]|[1-2][0-9]|3[0-1])/\d\d""18/25/77 14/32/47 02/25/99")
[
'02/25/99'
هذا تعبير نمطي جيد ، لكنه لا يزال يحتوي على بعض النقائص.
مذا عن 06/31 ؟ فجوان يحتوي على 30 يوم فقط.
ومذا عن 02/29/98 ؟ في سنة غير كبيسة.
لتحديد أن هذا التاريخ الأخير صالح أم لا يجب أن نحدد ماإذا كانت سنة 1998 كبيسة أم لا.

كما ترون ، يمكن أن تصبح التعبيرات النمطية معقدة للغاية ، لكنها قوية للغاية.





بالتوفيق لكم

توقيع
مايفعله الهكرز هو معرفة التكنولوجيا وتجربتها بطرق لايمكن ان يتخيلها الكثير من الناس .
ولديهم رغبة قوية في مشاركة هذه المعلومات مع الآخرين
وتوضيحها للاشخاص الذي قد تكون مؤهلاتهم الوحيدة الرغبة في التعلم.

[email protected]
3 أعضاء قالوا شكراً لـ zero-cool على المشاركة المفيدة:
zero-cool :: عضو خاص ::
  • شكراً: 66
  • تم شكره 269 مرة في 63 مشاركة

يوجد خطأ في آخر كود

كود PHP:
>>> re.findall("(?:0[0-9]|1[0-2])/(?:0[1-9]|[1-2][0-9]|3[0-1])/\d\d""18/25/77 14/32/47 02/25/99")
[
'02/25/99'

توقيع
مايفعله الهكرز هو معرفة التكنولوجيا وتجربتها بطرق لايمكن ان يتخيلها الكثير من الناس .
ولديهم رغبة قوية في مشاركة هذه المعلومات مع الآخرين
وتوضيحها للاشخاص الذي قد تكون مؤهلاتهم الوحيدة الرغبة في التعلم.

[email protected]
الأعضاء الذين قالوا شكراً لـ zero-cool على المشاركة المفيدة: