Toolyard

أساسيات التعابير النمطية: دليل للمبتدئين مع أمثلة

ما التعبير النمطي

التعبير النمطي نمط للبحث في النص. cat يجد الأحرف «cat» في أي مكان، بما في ذلك داخل «cats». وتتيح الأحرف الخاصة للنمط أن يصف أنواعًا من النص بدلًا من أحرف محددة.

الأجزاء الأساسية

.أي حرف عدا فاصل السطر
\d, \w, \sرقم؛ حرف أو رقم أو شرطة سفلية؛ مسافة أو مسافة جدولة أو فاصل سطر
[aeiou], [^0-9]أي واحد من هذه الأحرف؛ أي حرف ليس رقمًا
*, +, ?صفر أو أكثر، واحد أو أكثر، صفر أو واحد مما قبله
{3}, {2,4}3 بالضبط؛ بين 2 و4
^, $بداية النص ونهايته (أو كل سطر مع العلم m)
\bحد كلمة: \bcat\b يجد «cat» لا «cats»
( ), |مجموعة يمكنك إعادة استخدامها في الاستبدال؛ هذا أو ذاك

للبحث عن حرف خاص كما هو، ضع قبله شرطة مائلة عكسية: \. يجد نقطة.

أمثلة

  • \d{3}-\d{4} يجد أرقامًا مكتوبة مثل 555-0123.
  • ^[ \t]+|[ \t]+$ مع العلمين g وm يجد المسافات ومسافات الجدولة في بداية كل سطر ونهايته، جاهزة لاستبدالها بلا شيء.
  • (\d{4})-(\d{2})-(\d{2}) مستبدَلًا بـ $3/$2/$1 يحول 2024-09-27 إلى 27/09/2024.

الأعلام والمطابقات الجشعة

العلم g يجد كل المطابقات لا الأولى فقط، وi يتجاهل حالة الأحرف، وm يجعل ^ و$ تعملان لكل سطر. المكمِّمات جشعة: <.*> يمتد من أول < إلى آخر > في السطر. أضف ? لتتوقف في أقرب موضع: <.*?>. ويعمل \w في JavaScript على الأحرف اللاتينية فقط؛ وللبحث عن أحرف عربية استخدم نطاقًا مثل [\u0600-\u06FF].

جرّب الأنماط مع تمييز مباشر في مختبر التعابير النمطية، الذي يستخدم صيغة JavaScript، وطبّقها على نصك في بحث واستبدال.

أنماط لمهام يومية

للعثور علىالنمط
الأسطر الفارغة^\s*$ مع العلامة m
المسافات المكررة {2,}، تُستبدل بمسافة
أي شيء بين قوسين\([^)]*\)
سعر\$\d+(\.\d{2})?
وسم HTML<[^>]+>
الحقل الأخير في سطر CSV[^,]+$ مع العلامة m

إعادة الترتيب بالمجموعات

البحث عن (\w+), (\w+) والاستبدال بـ $2 $1 يحوّل «Smith, John» إلى «John Smith» في قائمة كاملة. كل زوج أقواس يُرقَّم من اليسار، و$0 هو المطابقة الكاملة. لاحظ أن ‎\w في JavaScript لا يطابق الحروف العربية، فاستخدم النطاق ‎[\u0600-\u06FF]+ للكلمات العربية.

أخطاء شائعة

  • نسيان أن النقطة تعني أي شيء. file.txt يطابق أيضًا «fileXtxt». اكتب file\.txt.
  • المحددات الجشعة تأخذ أكثر من اللازم. ".*" في سطر فيه نصان بين علامتي اقتباس يطابق من أول علامة إلى آخرها. استخدم ".*?".
  • افتراض أن كل الأدوات تستخدم الصياغة نفسها. النظر إلى الخلف، والمجموعات المسماة، و\d داخل فئة محارف تختلف بين JavaScript وPython وgrep ومحررك.
  • محاولة تحليل بنى متداخلة. في HTML وJSON والشيفرة تداخل لا يستطيع تعبير نمطي تتبعه. استخدم محللًا واترك التعبير النمطي للنص العادي.
  • نمط يتجمد. المحددات المتداخلة مثل (a+)+b قد تستغرق زمنًا أسيًا في سطر طويل لا يطابق. بسّط النمط.

أدوات هذا الدليل

مزيد من الأدلة