ما التعبير النمطي
التعبير النمطي نمط للبحث في النص. 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قد تستغرق زمنًا أسيًا في سطر طويل لا يطابق. بسّط النمط.