ما الذي تفعله هذه الأداة
يفحص مختبر تعابير PCRE النمطية تعبيرًا نمطيًا على نصك باستخدام مكتبة PCRE2 الحقيقية، وهي المحرك نفسه الذي تستخدمه PHP والأدوات ذات أسلوب Perl وكثير من خوادم الويب. تُميَّز التطابقات، ويُدرج كل تطابق مع موضعه ومجموعات الالتقاط فيه، ويعرض الاستبدال الاختياري نتيجة عملية استبدال بأسلوب preg_replace.
الاختبار على المحرك الحقيقي مهم لأن تعابير PCRE وتعابير JavaScript تختلف في تفاصيل صغيرة لكنها مهمة. فقد يفشل نمط يعمل في مختبر داخل المتصفح في التصريف داخل PHP، أو يطابق شيئًا مختلفًا.
طريقة الاستخدام
- اكتب النمط دون محددات في نمط PCRE.
- الصق النص المراد البحث فيه في نص الاختبار.
- فعّل المُعدِّلات التي تحتاجها: g لكل التطابقات (مثل preg_match_all)، وi وm وs وx وU، وu لجعل
\wو\dو\bتدرك Unicode. - املأ اختياريًا حقل الاستبدال بـ لمعاينة الاستبدال. استخدم
$1أو${1}للمجموعات المرقّمة، و${name}للمجموعات المسمّاة، و$0للتطابق كاملًا.
تعرض الأنماط غير الصالحة رسالة الخطأ الخاصة بـ PCRE2 والموضع في النمط الذي توقف عنده.
مثال
النمط الافتراضي \((?:[^()]++|(?R))*\) يعثر على الأقواس المتوازنة. فهو يطابق زوجًا من الأقواس يحتوي إما على أحرف ليست أقواسًا أو، بشكل تكراري، على النمط كله مرة أخرى. في نص المثال يعثر على (a, g(b, c)) و((x), y) ويتجاهل القوس غير المغلق في النهاية. ولا تستطيع تعابير JavaScript النمطية التعبير عن هذا.
جرّب (?<amount>\d+(?:\.\d+)?)\s+(?<cur>USD|EUR) مع الاستبدال ${cur} $1 لتبديل مواضع المبالغ ورموز العملات في السطر الثاني.
ميزات PCRE التي تستحق المعرفة
- المكمّمات الاستحواذية (
*+و++و?+) والمجموعات الذرية ((?>...)) لا تتخلى أبدًا عمّا طابقته، مما يمنع التراجع الخارج عن السيطرة. \Kيعيد تعيين بداية التطابق، وهو بديل بسيط عن lookbehind.- التكرار الذاتي بـ
(?R)أو(?1)أو(?&name)يطابق البنى المتداخلة. - المُعدِّلات المضمّنة مثل
(?i)تغيّر السلوك لجزء من النمط.
نصائح
- في PHP، أحِط النمط بمحددات مثل
/.../أو~...~واختر محددًا لا يظهر في النمط، كي لا تضطر إلى تهريبه. - فعّل u عندما يحتوي نصك على أحرف بعلامات تشكيل أو أحرف CJK كي يطابقها
\w.
الأسئلة الشائعة
› بماذا تختلف هذه الأداة عن مختبر تعابير JavaScript النمطية؟
تشغّل هذه الصفحة PCRE2، المحرك الذي تقوم عليه دوال preg_ في PHP وNginx وApache وأدوات كثيرة أخرى، مُصرَّفًا إلى WebAssembly. وهو يدعم صياغات لا تدعمها JavaScript، مثل التكرار الذاتي بـ (?R)، والمكمّمات الاستحواذية مثل a++، والمجموعات الذرية، و\K، ومجموعات (?P<name>...)، والمُعدِّلين x وU.
› هل أكتب المحددات، مثل /pattern/i؟
لا. أدخل النمط فقط وفعّل المُعدِّلات من مربعات الاختيار. في PHP، يقابل `preg_match('/\d+/i', $s)` النمط `\d+` مع تفعيل «تجاهل حالة الأحرف».
› لماذا ظهرت لي رسالة "match limit exceeded"؟
بعض الأنماط، مثل ^(a+)+$ على نص طويل غير مطابق، تتراجع (backtrack) عددًا أُسّيًا من المرات. يتوقف المختبر بعد خمسة ملايين خطوة كي تبقى الصفحة متجاوبة. ولدى PHP حماية مشابهة هي pcre.backtrack_limit، وتُرجع preg_match القيمة false عند بلوغها.
› هل يُرفع نصي؟
لا. تُنزَّل وحدة PCRE2 بصيغة WebAssembly مرة واحدة، ويعمل كل شيء في متصفحك.