التعابير النمطية المتوافقة مع لغة Perl‎ أو ‎‎(PCRE)‎

من موسوعة حسوب
< PHP
مراجعة 04:42، 22 أبريل 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

مقدمة

تشبه صياغة الأنماط المستخدمة في هذه الدوال إلى حد كبير نفس صياغتها في لغة بيرل Perl. على سبيل المثال، يجب تضمين التعبير بين فاصلين (delimiters)، الشرطة المائلة للأمام (/) (slash). يمكن أن تكون الفواصل أي حرف ASCII غير هجائي رقمي، وليس مسافة فارغة باستثناء الشَرطة المائلة العكسية (\) (backslash) أو البايت الفارغ (null byte). إذا كان يجب استخدام الحرف الفاصل في التعبير نفسه، يجب تهريبه بواسطة الشَرطة المائلة العكسية (\).

قد يتبع فاصلُ النهاية العديدَ من المُعدِّلات (modifiers) التي تؤثر على عملية المُطابقة. راجع مُعدِّلات الأنماط.

ملاحظة: تحتفظ هذه الإضافة بذاكرة انتقالية مؤقتة عمومية لكل سلسلة من التعبيرات النمطية المترجمة (حتى 4096).

تحذير: يجب أن تكون على دراية ببعض قيود PCRE. راجع الصفحة http://www.pcre.org/pcre.txt لمزيد من المعلومات.

من الجدير بالذكر أن مكتبة PCRE هي مجموعة من الدوال التي تطابق نمط التعبير النمطي باستخدام نفس صياغة ودلالات Perl 5، فقط مع بعض الاختلافات.

الثوابت المُعرّفة مسبقًا

تُعرّف الثوابت التالية بواسطة هذه الإضافة، وستكون متاحة فقط عندما تكون الإضافة قد تُرجمت في PHP أو حُملت ديناميكيًا في وقت التشغيل.

الثابت الوصف الإصدار
PREG_PATTERN_ORDER ترتيب النتائج بحيث تكون ‎ $matches[0]‎عبارة عن مصفوفة من السلاسل النصية التي قد طابقت كامل النمط، ‎و $matches[1]‎ عبارة عن مصفوفة من السلاسل النصية متطابقة مع النمط الفرعي الأول الموجود بين الأقواس، وهكذا. تُستخدم هذه الراية فقط مع الدالة preg_match_all()‎‎.
PREG_SET_ORDER ترتيب النتائج بحيث تكون ‎ $matches[0]‎عبارة عن مصفوفة من أول مجموعة من المطابقات، و ‎ $matches[1]‎ عبارة عن مصفوفة من ثاني مجموعة من المطابقات، وهكذا. تُستخدم هذه الراية فقط مع الدالة preg_match_all()‎.
PREG_OFFSET_CAPTURE شاهد وصف PREG_SPLIT_OFFSET_CAPTURE. 4.3.0
PREG_SPLIT_NO_EMPTY تُعيد الدالة preg_split()‎‎ مع هذه الراية الأجزاء غير الفارغة فقط.
PREG_SPLIT_DELIM_CAPTURE تلتقط الدالة preg_split()‎‎ مع هذه الراية التعبيرَ الموجود بين قوسين في نمط المُحدِّد أيضًا. 4.0.5
PREG_SPLIT_OFFSET_CAPTURE إذا ضُبِطت هذه الراية، فستُعاد أيضًا إزاحة السلسلة المُذيّلة لكل تواجد لمطابق. لاحظ أن هذا يغير القيم المُعادة في شكل مصفوفة، ويكون كل عنصر فيها عبارة عن مصفوفة تتكون من السلسلة النصية المطابقة عند الإزاحة 0 وسلسلتها النصية ضمن موضوع البحث عند الإزاحة 1. تستخدم هذه الراية فقط مع الدالة preg_split()‎‎. 4.3.0
PREG_UNMATCHED_AS_NULL تخبر هذه الراية الدالتين preg_match()‎ و preg_match_all()‎ لتضمين الأنماط الفرعية غير المتطابقة في ‎$matches بالقيم NULL. وبدون هذه الراية، يتم تمرير الأنماط الفرعية غير المتطابقة كسلاسل فارغة، كما لو كانت متطابقة فارغة. يسمح تعيين هذه الراية بالتمييز بين هاتين الحالتين. 7.2.0
PREG_NO_ERROR تُعيده الدالة preg_last_error()‎‎ إذا لم تكن هناك أخطاء. 5.2.0
PREG_INTERNAL_ERROR تُعيده الدالة preg_last_error()‎‎ إذا كان هناك خطأ PCRE داخلي. 5.2.0
PREG_BACKTRACK_LIMIT_ERROR تُعيده الدالة preg_last_error()‎‎ إذا استُنفِد حد التراجع (backtrack limit). 5.2.0
PREG_RECURSION_LIMIT_ERROR تُعيده الدالة preg_last_error()‎‎ إذا استُنفِد حد العودية (recursion limit). 5.2.0
PREG_BAD_UTF8_ERROR تُعيده الدالة preg_last_error()‎‎ إذا كان الخطأ الأخير بسبب بيانات UTF-8 غير صحيحة (فقط عند تشغيل تعبير نمطي في وضع UTF-8). 5.2.0
PREG_BAD_UTF8_OFFSET_ERROR تُعيده الدالة preg_last_error()‎‎ إذا لم تتوافق الإزاحة مع بداية نقطة رمز UTF-8 صالحة (فقط عند تشغيل تعبير نمطي في وضع UTF-8). 5.3.0
PREG_JIT_STACKLIMIT_ERROR تُعيده الدالة preg_last_error()‎‎ إذا فشلت آخر دالة PCRE بسبب محدودية مساحة مكدّس JIT. 7.0.0
PCRE_VERSION إصدار PCRE وتاريخ إطلاقه (على سبيل المثال ‎"7.0 18-Dec-2006"‎). 5.2.4

أمثلة

المثال 1: أمثلة على الأنماط الصالحة

/<\/\w+>/
|(\d{3})-\d+|Sm
/^(?i)php[34]/
{^\s+(\s+)?$}

المثال 2: أمثلة على الأنماط غير الصالحة

/href='(.*)' - فاصل الانتهاء مفقود
/\w+\s*\w+/J - معدِّل غير معروف 'J'
1-\d3-\d3-\d4| - فاصل البدء المفقود

مصادر