في بعض الأحيان لا أعرف عدد الشخصيات التي يجب مطابقتها. لتكون قادرة على التكيف مع عدم اليقين هذا ، تدعم التعبيرات العادية مفهوم التصفيات. يمكن أن تحدد هذه المؤهلات عدد المرات التي يجب أن تظهر فيها مكون معين من التعبير العادي قبل الوفاء بالمباراة.
يعطي الجدول التالي شرحًا لمختلف التصفيات ومعانيها:
شخصية | يصف |
---|---|
* | يتطابق مع التعبير الفرعي السابق صفر أو عدة مرات. على سبيل المثال ، يمكن لـ Zo* مطابقة Z و Zoo. * يعادل {0 ،}. |
+ | يطابق التعبير الفرعي السابق مرة أو أكثر. على سبيل المثال ، يمكن لـ "Zo+" مطابقة Zo و Zoo ، ولكن ليس z. + يعادل {1 ،}. |
؟ | يتطابق مع التعبير الفرعي السابق صفر أو مرة واحدة. على سبيل المثال ، هل (ES)؟ ؟ |
{ n } | N هو عدد صحيح غير سالب. تطابق الأوقات n التي يتم تحديدها. على سبيل المثال ، لا يمكن أن تتطابق مع "O {2}" في بوب ، ولكن يمكن أن تطابق اثنين من نظام التشغيل في الطعام. |
{ n ،} | N هو عدد صحيح غير سالب. تطابق على الأقل ن مرات. على سبيل المثال ، لا يمكن مطابقة "O {2 ،}" في "O" في Bob ، ولكن يمكن أن تتطابق مع كل نظام التشغيل في Fooooood. "O {1 ،}" يعادل "O+". 'o {0 ،}' يعادل 'o*'. |
{ n ، m } | كلا M و N من أعداد صحيحة غير سالبة ، حيث n <= m . تطابق على الأقل ن مرات وتطابق مع M Times. سيتطابق Liu ، O {1،3} مع أول ثلاثة نظام تشغيل في Fooooood. "O {0،1}" يعادل "O؟". يرجى ملاحظة أنه لا يمكن أن تكون هناك مسافات بين الفواصل والرقمين. |
بالنسبة لمستند إدخال كبير ، يمكن أن يتجاوز عدد الفصول بسهولة تسعة فصول ، لذلك هناك طريقة للتعامل مع أرقام الفصل المكونة من رقمين أو من ثلاثة أرقام. يوفر التصفيات هذه الوظيفة. يمكن أن يتطابق التعبير العادي JScript التالي مع عنوان الفصل مع أي عدد من البتات:
/Chapter [1-9][0-9]*/
يؤدي التعبير العادي في VBScript التالي نفس المباراة:
Chapter [1-9][0-9]*
لاحظ أن المؤهلات تظهر بعد التعبير النطاق. لذلك ، سيتم تطبيقه على تعبير النطاق بالكامل الموجود ، في هذه الحالة يتم تحديد أرقام فقط من 0 إلى 9.
لا يتم استخدام مؤهل "+" هنا ، لأن الرقم غير مطلوب بالضرورة في الموقف الثاني أو اللاحق. لا يتم استخدام شخصية "لا؟ يجب مطابقة رقم واحد على الأقل بعد "الفصل" وشخصيات الفضاء.
إذا كان من المعروف أن حد الفصل هو 99 فصلاً ، فيمكنك استخدام تعبير JScript التالي لتحديد رقم واحد على الأقل ، ولكن لا يزيد عن رقمين.
/Chapter [0-9]{1,2}/
بالنسبة إلى VBScript ، يمكن استخدام التعبيرات العادية التالية:
Chapter [0-9]{1,2}
عيب التعبير أعلاه هو أنه إذا كان هناك رقم الفصل أكبر من 99 ، فسيظل يطابق فقط أول رقمين. عيب آخر هو أن بعض الأشخاص يمكنهم إنشاء الفصل 0 ولا يزالون يتطابقون. تعبير JScript أفضل لمطابقة رقم رقم مزدوج هو كما يلي:
/Chapter [1-9][0-9]?/
أو
/Chapter [1-9][0-9]{0,1}/
بالنسبة لـ VBScript ، فإن التعبير التالي يعادل ما سبق:
Chapter [1-9][0-9]?
أو
Chapter [1-9][0-9]{0,1}
" *
" و " +'
و " ?'
تسمى التصفيات جميعها الجشع ، أي أنها تطابق أكبر عدد ممكن من الكلمات. في بعض الأحيان ليس هذا ما تريد أن يحدث على الإطلاق. في بعض الأحيان يحدث أن يكون أصغر مباراة.
على سبيل المثال ، قد ترغب في البحث عن مستند HTML للعثور على عنوان الفصل المدرج في علامة H1. في المستند ، قد يكون للنص النموذج التالي:
<H1>Chapter 1 – Introduction to Regular Expressions</H1>
يطابق التعبير التالي كل شيء من البداية أقل من علامة (<) إلى نهاية علامة H1.
/<.*>/
التعبير العادي لـ VBScript هو:
<.*>
إذا كان ما يجب مطابقته هو علامة H1 التي تبدأ ، فإن تعبيرات غير Greedy التالية تتطابق فقط مع <h1>.
/<.*?>/
أو
<.*?>
عن طريق وضع "؟
حتى الآن ، الأمثلة التي شوهدت فقط تفكر في العثور على عناوين الفصل التي تظهر في أي مكان. أي سلسلة "فصل" تظهر متبوعة بمساحة وقد يكون عدد عنوان الفصل الحقيقي أو إشارة متقاطعة إلى فصول أخرى. نظرًا لأن عنوان الفصل الحقيقي يظهر دائمًا في بداية الخط ، فمن الضروري تصميم طريقة للبحث عن العنوان فقط وليس المرجع المتقاطع.
المواقع توفر هذه الوظيفة. يمكن للمحدد إصلاح تعبير منتظم في بداية أو نهاية الخط. يمكنك أيضًا إنشاء تعبيرات منتظمة تظهر فقط داخل الكلمات أو فقط في بداية أو نهاية كلمة ما. يحتوي الجدول التالي على قائمة بالتعبيرات العادية ومعانيها:
شخصية | يصف |
---|---|
^ | يطابق موضع بدء سلسلة الإدخال. إذا تم تعيين الخاصية متعددة الأسلحة لكائن regexp ، فإن ^ يطابق أيضًا الموضع بعد '/n' أو '/r'. |
$ | يطابق الموضع النهائي لسلسلة الإدخال. إذا تم تعيين خاصية متعددة الأسلحة لكائن RegexP ، فإن $ يطابق الموضع قبل "/n 'أو'/r '. |
/ب | تطابق حدود كلمة ، مما يعني الموضع بين الكلمة والفضاء. |
/ب | تطابق الحدود غير الكلمة. |
لا يمكن استخدام التصفيات للمحددات. نظرًا لعدم وجود مواقف متتالية قبل أو بعد حدود سطر جديد أو كلمة ، لا يُسمح بالتعبيرات مثل "^*".
لمطابقة النص في بداية سطر النص ، استخدم الحرف "^" في بداية التعبير العادي. لا تخلط بين بناء جملة "^" مع بناء الجملة بين أقواس تعبيرات. بناء الجملة الخاص بهم مختلف اختلافا في الأساس.
لمطابقة النص في نهاية خط النص ، استخدم حرف "$" في نهاية التعبير العادي.
لاستخدام موقع محدد عند البحث عن عناوين الفصل ، سيتطابق التعبير العادي JScript التالي مع عنوان الفصل مع رقمين في بداية السطر:
/^Chapter [1-9][0-9]{0,1}/
تعبيرات منتظمة لنفس الوظيفة في vbscript هي كما يلي:
^Chapter [1-9][0-9]{0,1}
لا يظهر عنوان الفصل الحقيقي في بداية الخط فحسب ، بل يحتوي أيضًا على هذا المحتوى فقط في هذا السطر ، لذلك يجب أن يكون أيضًا في نهاية الخط. يضمن التعبير التالي أن المطابقة المحددة لا تتطابق إلا مع الفصل ولا تتطابق مع المراجع المتقاطعة. يتم تحقيقه من خلال إنشاء تعبير منتظم لا يطابق سوى المواضع الأولى والنهاية لخط من الحرفي.
/^Chapter [1-9][0-9]{0,1}$/
ل VBScript ، استخدم:
^Chapter [1-9][0-9]{0,1}___FCKpd___16quot;
تختلف حدود مطابقة الكلمات قليلاً ، لكنها تضيف وظيفة مهمة للغاية للتعبيرات العادية. الكلمة الحدود هي الموضع بين الكلمة والمساحة. الحدود غير الكلمة في أي مكان آخر. سوف يتطابق تعبير JScript التالي مع الأحرف الثلاثة الأولى من كلمة "الفصل" لأنها تظهر بعد حدود الكلمة:
//bCha/
ل VBScript:
/bCha
موقف عامل "/B" أمر بالغ الأهمية هنا. إذا كان ذلك في بداية السلسلة للمطابقة ، يتم البحث عن تطابق في بداية الكلمة ؛ على سبيل المثال ، سوف يتطابق التعبير التالي "ter" في كلمة "الفصل" لأنه يظهر قبل حدود الكلمة:
/ter/b/
إلى جانب
ter/b
سوف يتطابق التعبير التالي "APT" لأنه في منتصف "الفصل" ، ولكنه لن يتطابق مع "APT" في "Aptitude":
//Bapt/
إلى جانب
/Bapt
وذلك لأن "APT" يظهر في الموضع غير الكلمة في كلمة "الفصل" وفي كلمة "الكفاءة". إن موضع عوامل الحدود غير الكلمة ليس مهمًا لأن المباراة لا علاقة لها ببداية أو نهاية الكلمة.