النص الإنجليزي الأصلي يأتي من مجلة Smashing . تمت الترجمة بواسطة Benhuoer . يرجى الإشارة إلى المصدر عند إعادة الطباعة.
تعد التعبيرات العادية (Regular Expression، abbr.regex) قوية ويمكن استخدامها للعثور على المعلومات المطلوبة في سلسلة كبيرة من الأحرف. ويستخدم تعبيرات بنية الأحرف التقليدية للعمل. لسوء الحظ، التعبيرات العادية البسيطة ليست قوية بما يكفي لبعض التطبيقات المتقدمة. إذا كانت بنية التصفية أكثر تعقيدًا، فقد تحتاج إلى استخدام التعبيرات العادية المتقدمة.
تقدم لك هذه المقالة التقنيات المتقدمة للتعبيرات العادية. لقد قمنا بفحص ثمانية مفاهيم شائعة الاستخدام وقمنا بتحليلها مع الأمثلة، كل مثال هو طريقة بسيطة للكتابة لتلبية متطلبات معقدة معينة. إذا كنت لا تزال تفتقر إلى فهم المفاهيم الأساسية للتنظيم، يرجى قراءة هذه المقالة أو هذا البرنامج التعليمي أو إدخال Wiki أولاً.
بناء الجملة العادي هنا مناسب لـ PHP ومتوافق مع Perl.
1. الجشع/الكسل
جميع المشغلين العاديين الذين يمكن تأهيلهم عدة مرات هم جشعون. إنها تطابق أكبر قدر ممكن من السلسلة المستهدفة، مما يعني أن نتيجة المطابقة ستكون أطول فترة ممكنة. ولسوء الحظ، فإن هذا النهج ليس دائما ما نريده. ولذلك، فإننا نضيف المؤهل "كسول" لحل المشكلة. تؤدي إضافة "؟" بعد كل عامل جشع إلى مطابقة التعبير لأقصر طول ممكن فقط. بالإضافة إلى ذلك، يمكن للمعدِّل "U" أيضًا أن يقوم بتأخير المشغلين الذين يمكن تأهيلهم عدة مرات. إن فهم الفرق بين الجشع والكسل هو أساس استخدام التعبيرات العادية المتقدمة.
المشغل الجشع
يطابق عامل التشغيل * التعبير السابق صفرًا أو أكثر. إنه عامل جشع. يرجى الاطلاع على المثال التالي:
preg_match( '/<h1>.*< /h1>/', '</h1><h1>هذا عنوان.</h1>
<h1>هذا شيء آخر. </h1>', $matches );
يمكن أن تمثل النقطة (.) أي حرف باستثناء أحرف السطر الجديد. يتطابق التعبير العادي أعلاه مع علامة h1 وكل شيء داخل العلامة. ويستخدم النقاط (.) والعلامات النجمية (*) لمطابقة كل شيء داخل العلامة. نتائج المطابقة هي كما يلي:
<h1>هذا عنوان. </h1>
<h1>هذا شيء آخر. </h1>
يتم إرجاع السلسلة بأكملها. سيطابق عامل التشغيل * كل شيء في الصف - حتى علامة الإغلاق h1 في المنتصف. نظرًا لأنها جشعة، فإن مطابقة السلسلة بأكملها تتماشى مع مبدأ تعظيم المصالح.
عامل كسول
قم بتعديل الصيغة أعلاه قليلاً وأضف علامة استفهام (؟) لجعل التعبير كسولا:
/<h1>.*?< /h1>/</h1>
بهذه الطريقة، ستشعر أنه يحتاج فقط إلى مطابقة علامة النهاية h1 الأولى لإكمال المهمة.
عامل جشع آخر له خصائص مشابهة هو {n,}. وهذا يعني أن نمط المطابقة السابق يتكرر لعدد مرات أو أكثر، وإذا لم تتم إضافة علامة استفهام، فسيتم البحث عن أكبر عدد ممكن من التكرارات، وإذا تمت إضافته، فسيتم تكراره بأقل قدر ممكن (بالطبع، "كرر". n مرات" هو الحد الأدنى).
#إنشاء سلسلة
$str = 'هيهيهي عفوًا مرحبًا';
# استخدم عامل التشغيل الجشع {n,} للمطابقة
preg_match( '/(hi){2,}/', $str, $matches );
# استخدم عامل التشغيل المتدهور {n,}؟
preg_match( '/(hi){2,}?/', $str, $matches );
المصدر: عمل غبي