مختبر التعابير النمطية
اختبر وصحح التعابير النمطية (Regex) في الوقت الفعلي — مع إبراز حي للمطابقات ومجموعات الالتقاط.
التعبيرات النمطية أكثف لغة مصغّرة معلوماتيًا في البرمجة — دستة أحرف تعبّر عن نمط يتطلّب خمسين سطرًا من كود السلاسل اليدوي — وأقلها تسامحًا أيضًا، لأن تعبيرًا شبه صحيح يفشل بصمت على المدخلات التي لم تفكّر بتجربتها. تلك التوليفة هي سبب أن المختبِر الحيّ هو طريقة العمل الصحيحة: ترى التطابقات تُضاء وتختفي أثناء الكتابة، ما يحوّل كتابة التعبيرات من نظرية حذرة لتجربة سريعة. يُشغّل هذا المختبِر نمطك على نصك العيّنة لحظيًا، ويعرض مجموعات الالتقاط، ويدعم أعلام جافاسكربت المعيارية.
كيف يعمل المختبِر
اكتب نمطًا في حقل التعبير والصق نصًا عيّنة تحته. تُضاء التطابقات فورًا حين يتغيّر أيهما، وتُسرَد مجموعات التقاط كل تطابق بمحتوياتها. بدّل الأعلام لتغيير السلوك: g يجد كل التطابقات بدل الأول، وi يتجاهل الحالة، وm يجعل ^ و$ يعملان لكل سطر، وs يتيح للنقطة مطابقة الأسطر الجديدة. المحرّك هو تنفيذ جافاسكربت في متصفحك ذاته، فالسلوك يطابق تمامًا ما سيفعله نفس النمط في كود جافاسكربت.
التركيب الأساسي
. أي حرف \d رقم \w حرف كلمة
* 0 أو أكثر + 1 أو أكثر ? 0 أو 1
[abc] مجموعة أحرف [^abc] مجموعة منفية
^ البداية $ النهاية \b حد كلمة
(x) مجموعة التقاط (?:x) غير ملتقطة
a|b تناوب {2,5} نطاق تكرار
بريد (عملي): [\w.+-]+@[\w-]+\.[\w.]+
تاريخ (YYYY-MM-DD): ^\d{4}-\d{2}-\d{2}$القاعدة الأخطر منفردةً: المُكمّمات جشعة افتراضيًا. يأخذ .* أطول تطابق ممكن، فـ`".*"` مُطبَّقًا على سطر بسلسلتين مقتبستين يطابق من أول اقتباس لآخره، بالعًا كل ما بينهما. إلحاق ? يجعل المُكمّم كسولًا — `".*?"` يتوقف عند أول اقتباس إغلاق. نحو نصف كل أخطاء التعبيرات في العالم أخطاء جشع مقابل كسل، والإصلاح حرف واحد.
ما يجب معرفته عن التعبيرات النمطية
- 1اختبر على مدخلات لا ينبغي أن تتطابق. نمط يطابق كل ما تريده نصف مُتحقَّق؛ تفشل الأنماط بمطابقة الكثير أكثر بكثير من القليل. أطعم المختبِر بريدات مشوّهة وسلاسل فارغة ومدخلات شبه صائبة — النمط الذي يرفضها بشكل صحيح هو المنتهي فعلًا.
- 2اهرب الأحرف الخاصة الحرفية. الأحرف . * + ? ( ) [ ] { } | ^ $ \ كلها تحمل معنى، ونسيان الشرطة العكسية هو الخطأ الصامت الكلاسيكي: مطابقة النسخة "1.2" بـ1.2 تطابق "132" أيضًا، لأن النقطة تعني أي حرف. عند مطابقة نقطة حرفية، اكتب \. دائمًا.
- 3احذر التراجع الكارثي. المُكمّمات المتداخلة كـ(a+)+ على مدخل غير مطابق قد تجبر المحرّك على تجربة مسارات أُسّية العدد، مجمّدةً التبويب — أنماط كهذه أسقطت خدمات إنتاج. إن علّق نمط على مدخل طويل، فالبنية لا المدخل هي المشكلة.
- 4التعبير النمطي أداة خاطئة للبنى المتداخلة. HTML وJSON والأقواس المتوازنة تتطلّب عدّ عمق، وهو ما لا تستطيعه التعبيرات النمطية رياضيًا. استخراج خاصية سريعة من HTML معروف مقبول؛ وتحليل HTML اعتباطي بالتعبيرات خطأ شهير وحقيقي — استخدم محلّلًا.
- 5فضّل الأنماط المقروءة على الذكية. التعبير النمطي يُكتب مرة ويُقرأ كثيرًا ككل كود، لكنه أكثف بكثير. تقسيم نمط بطولي واحد لخطوتين بسيطتين، أو استخدام مجموعات غير ملتقطة (?:) لتقليل الضجيج، يؤتي ثماره أول مرة يضطر أي أحد — بمن فيهم أنت — لتعديله.
الأسئلة الشائعة
لماذا يطابق نمطي أكثر من اللازم؟
دائمًا تقريبًا المُكمّمات الجشعة. يخطف * و+ أطول تطابق يستطيعانه، فـ`".*"` على نص بأقسام مقتبسة متعددة يطابق من أول اقتباس للأخير تمامًا. أضف ? بعد المُكمّم لجعله كسولًا — `".*?"` — فيتوقف عند أبكر اكتمال. بديلًا، استخدم مجموعة منفية كـ`"[^"]*"`، الأسرع والأوضح غالبًا: طابق أي شيء عدا اقتباس الإغلاق.
ماذا تفعل الأعلام g وi وm وs؟
g (عام) يجد كل التطابقات بدل التوقف عند الأول — بدونه، تُغيّر عمليات الاستبدال حدوثًا واحدًا فقط. i (تجاهل الحالة) يجعل الحروف تطابق الحالتين. m (متعدد الأسطر) يغيّر ^ و$ من مرساتي النص الكامل لمرساتي كل سطر. s (النقطة للكل) يتيح لـ. مطابقة أحرف السطر الجديد، ما لا تفعله خلاف ذلك — مهم كلما وجب أن يمتد نمط عبر أسطر.
ما الفرق بين (x) و(?:x)؟
كلاهما يجمّع، لكن (x) يلتقط — يُخزَّن النص المطابق ويُرقَّم للاستخراج أو الإسناد الخلفي — بينما (?:x) يجمّع دون التقاط. استخدم الالتقاط حين تحتاج المحتويات، وغير الملتقط حين تحتاج التجميع فقط للتناوب أو التكرار. غير الملتقط يُبقي أرقام المجموعات مستقرة وأسرع هامشيًا؛ والمجموعات المسماة (?<name>x) أفضل بعد حين تلتقط عدة أشياء.
هل يوجد تعبير نمطي صحيح واحد للتحقق من البريد الإلكتروني؟
لا، ومطاردته فخ. قواعد RFC الكاملة لعناوين البريد باروكية شهيرةً — التعبير المكتمل تقنيًا يمتد لآلاف الأحرف ولا يستطيع رغم ذلك تأكيد وجود صندوق بريد. الجواب العملي: افحص الشكل بشيء مثل [\w.+-]+@[\w-]+\.[\w.]+ وتحقق من القابلية للتسليم بإرسال بريد تأكيد فعلي. فحص الشكل زائد التأكيد يتفوّق على أي نمط بطولي.
هل تعمل الأنماط بنفس الشكل في كل لغة؟
الجوهر محمول، لكن اللهجات تختلف عند الأطراف. يستخدم هذا المختبِر محرّك جافاسكربت، فالنظر الخلفي والمجموعات المسماة وأصناف يونيكود تسلك كما في المتصفحات الحديثة. تختلف بايثون قليلًا (re.match يرسو عند البداية)، ويستخدم grep تركيبًا أضيق ما لم يُعطَ -P، وتتطلّب Java مضاعفة هروب الشرطات داخل السلاسل الحرفية. اختبر في اللهجة التي ستنشر فيها عند استخدام مزايا متقدمة.