فهم عدم حساسية حالة تعبيرات Regex
تعد تعبيرات النمط (Regex) أدوات قوية لمطابقة الأنماط ومعالجة السلاسل النصية. أحد المتطلبات الشائعة عند العمل مع التعبيرات النمطية هو تجاهل حالة بعض الأحرف مع كونها حساسة لحالة أخرى. في هذه المقالة، نستعرض كيفية تحقيق عدم حساسية الحالة الانتقائية في التعبيرات النمطية، مما يوفر المزيد من المرونة في مطابقة الأنماط.
المشكلة
تخيل أن لديك سلسلة تحتوي على حالات مختلفة، مثل:
fooFOOfOoFoOBARBARbarbarbAr
افترض أنك تريد مطابقة “foo” بغض النظر عن حالته، ولكنك تريد فقط مطابقة الحروف الكبيرة “BARs”. التحدي هو إيجاد طريقة لجعل جزء فقط من نمط التعبير النمطي غير حساس لحالة الأحرف، مع الحفاظ على أقسام أخرى حساسة لحالة الأحرف.
النهج الشائع لعدم حساسية حالة تعبيرات Regex
غالبًا ما يتم جعل أنماط التعبيرات النمطية غير حساسة لحالة الأحرف بالكامل من خلال معدلات على مستوى التطبيق أو نمط التعبير. ومع ذلك، كما تم طرحه في سؤالنا الأولي، فإن هذا ليس دائمًا مرغوبًا.
الحل: تغييرات الوضع الداخلي
استخدام معدلات الأنماط
في لغات مثل Perl، يمكنك تحديد عدم حساسية الحالة لجزء فقط من نمط التعبير باستخدام معدل (?i:)
. إليك كيف يعمل:
- المعدلات الداخلية: أدخل
(?i:)
قبل الجزء من التعبير النمطي الذي تريد جعله غير حساس لحالة الأحرف. - إيقاف المعدلات: للعودة إلى حساسية الحالة، يمكنك استخدام المعدل
(?-i)
.
مثال
لسلسلة النص المعطاة، يمكننا بناء التعبير النمطي كما يلي:
(?i)foo*(?-i)|BAR
في هذا التعبير:
(?i)
يجعل الجزء “foo” من التعبير النمطي غير حساس لحالة الأحرف.(?-i)
يعيده إلى حساسية الحالة لأي شيء يلي حتى الفاصل (|) الذي يدل على بداية نمط تعبير آخر.
دعم التعبيرات النمطية عبر اللغات
-
تدعم المعدلات الداخلية:
- Perl
- PHP
- .NET
-
لا تدعم التعديل الداخلي:
- JavaScript
- Python
في JavaScript وPython، تنطبق جميع المعدلات على التعبير بالكامل، مما يعني أنه لا يوجد دعم لإيقاف الوضع بعد تفعيله.
اختبار تعبير Regex الخاص بك
يمكنك اختبار كيفية تعامل نوع التعبير النمطي لديك مع معدلات الأوضاع باستخدام مثال بسيط:
(?i)te(?-i)st
سوف يطابق:
- test
- TEst
لكن لا:
- teST
- TEST
الخاتمة
يمكن أن تعزز استخدام تغييرات الوضع الداخلي في التعبيرات النمطية من مطابقة الأنماط لديك من خلال توفير المرونة في حساسية الحالة. بينما تتيح بعض اللغات، مثل Perl وPHP، هذه التعديلات الدقيقة، فإن الآخرين مثل JavaScript وPython يفرضون نهجًا أكثر شمولية.
للحصول على معلومات أكثر تفصيلاً حول معدلات التعبيرات النمطية، ضع في اعتبارك التحقق من موارد إضافية مثل معلومات تعبيرات نمطية.
مع المنهج الصحيح، يمكنك بنجاح إنشاء أنماط تعبيرات نمطية تكون قوية ودقيقة، تتعامل مع حساسية الحالة حسب الحاجة.