مختبِر Regex: ابنِ الأنماط وصحّحها على نصك الخاص
التعبير النمطي (regex) لغة صغيرة لوصف شكل النص. فبدلًا من أن تسأل «هل هذه الكلمة بعينها هنا؟»، يتيح لك regex أن تسأل «هل توجد سلسلة تبدو هكذا؟». وهذا ما يجعله قويًا للعثور على النص والتحقق منه واستخراجه واستبداله في محرّرات الشيفرة وملفات السجلات ومدخلات النماذج والسكربتات. وهو أيضًا ما يجعله سهل الإفساد، لأن نمطًا يبدو سليمًا في رأسك قد يطابق بصمت أكثر من اللازم أو أقل من اللازم أو لا شيء على الإطلاق.
لهذا يتفوق الاختبار التفاعلي على التخمين. فحين تكتب نمطًا وتراقب المطابقات تتوهج عبر نص عيّنة حقيقي، تحصل على ملاحظات فورية: ترى ما التُقط، وما أفلت، وأي مجموعة التقاط أمسكت أي جزء. ويعمل مختبِر Regex لدينا بالكامل في متصفحك. فلا يغادر نمطك ونص عيّنتك الصفحة أبدًا، لذا يمكنك لصق أسطر سجلات أو رسائل بريد إلكتروني أو بيانات إنتاج دون إرسال أي شيء إلى خادم.

اللبنات التي يستحق معرفتها
تُركَّب معظم الأنماط اليومية من مجموعة صغيرة من القطع. تعلّم هذه القطع فتستطيع قراءة غالبية تعبيرات regex التي تصادفها في الواقع.
فئات الأحرف تصف مجموعة من الأحرف المسموح بها. فـ [aeiou] يطابق أي حرف علّة مفرد، و[0-9] يطابق رقمًا واحدًا، و[a-zA-Z] يطابق حرفًا واحدًا. وعلامة الإقحام داخل القوسين تنفي المجموعة، فـ [^0-9] تعني «أي حرف ليس رقمًا». والاختصارات توفّر الكتابة: فـ \d رقم، و\w حرف كلمة (أحرف وأرقام وشرطة سفلية)، و\s مسافة بيضاء، والنقطة . تطابق أي حرف مفرد تقريبًا.
المُكمِّمات تحدد عدد مرات تكرار القطعة السابقة. فـ * تعني صفرًا أو أكثر، و+ تعني واحدًا أو أكثر، و? تعني صفرًا أو واحدًا (اختياري). وللأعداد المضبوطة، {3} تعني ثلاثة بالضبط و{2,4} تعني من اثنين إلى أربعة. فـ \d{4} تطابق سنة من أربعة أرقام وcolou?r تطابق كلتا طريقتي التهجئة.
المرتكزات تثبّت النمط على موضع لا على حرف. فـ ^ تطابق بداية النص، و$ تطابق النهاية، و\b تعلّم حدّ كلمة. والنمط ^Error يطابق فقط الأسطر التي تبدأ بـ «Error»، وهذا تحديدًا ما تريده عند مسح السجلات.
المجموعات تغلّف جزءًا من النمط بين قوسين، سواء لتطبيق مُكمِّم على عدة أحرف دفعة واحدة أو لالتقاط النص المطابق لإعادة استخدامه. ففي (\d{4})-(\d{2})-(\d{2}) تلتقط كل مجموعة مكوّنًا من مكوّنات التاريخ يمكنك سحبه لاحقًا. والتناوب بالشريط العمودي يعمل كـ «أو»: فـ cat|dog|fish تطابق أيًا من الكلمات الثلاث.
الأنماط التي ستلجأ إليها فعلًا
قلة من المهام المتكررة تغطي معظم العمل الحقيقي. فلالتقاط شيء يشبه البريد الإلكتروني، يكون [\w.+-]+@[\w-]+\.[\w.-]+ نقطة بداية عملية؛ فالتحقق الكامل من البريد الإلكتروني وفق المواصفة الرسمية معقّد بشكل مشهور، والنمط الفضفاض عادةً هو الخيار الصائب لإبراز المرشحين بدلًا من رفض المستخدمين.
وللأرقام، تلتقط \d+ سلاسل من الأرقام، بينما تطابق -?\d+(\.\d+)? القيم السالبة والعشرية الاختيارية. ولتشذيب المسافات البيضاء في البداية والنهاية، طابِق ^\s+|\s+$ واستبدلها بلا شيء. ولإيجاد الكلمات المكررة، يطابق نمط الإسناد الخلفي \b(\w+)\s+\1\b كلمة متبوعة بنفسها، حيث يشير \1 إلى المجموعة الملتقطة الأولى.

الرايات تغيّر سلوك المطابقة
الرايات مفاتيح تعدّل النمط بأكمله. فالراية العامة (g) تجد كل مطابقة بدلًا من التوقف عند الأولى، وهو ما تريده عند إبراز جميع الورود. والراية غير الحساسة لحالة الأحرف (i) تجعل error يطابق «Error» و«ERROR» على حد سواء. والراية متعددة الأسطر (m) تغيّر ^ و$ فتطابقان بداية كل سطر ونهايته، لا النص بأكمله فقط، وهو أمر أساسي للعمل على السجلات سطرًا بسطر. ومن الرايات المفيدة الأخرى s (نقطة-الكل، التي تتيح للنقطة مطابقة فواصل الأسطر) وu للمعالجة الكاملة لـ Unicode.
النكهات تختلف قليلًا حسب اللغة
regex عائلة من اللهجات، لا معيارًا واحدًا ثابتًا. فـ JavaScript وPython وPCRE (PHP) وJava و.NET وGo وRust تتفق على بناء الجملة الأساسي أعلاه، لكنها تتباين عند الأطراف: دعم النظر إلى الخلف، وبناء جملة المجموعات المسمّاة ((?<name>...) مقابل (?P<name>...))، وهروب خصائص Unicode، وأي الرايات موجودة، كل ذلك يتفاوت. فنمط يعمل في محرّك قد يحتاج إلى تعديل صغير في آخر، لذا يجدر الاختبار على النكهة التي تشحن بها فعلًا. وحين تضبط نمطًا، يمكن لبقية أدوات المطورين وأدوات النصوص لدينا أن تساعد في العمل المحيط من تنظيف وترميز وتحويل للبيانات التي طابقتها للتو.
الأسئلة الشائعة
هل يُرسَل نصي إلى خادم؟
لا. يعمل مختبِر Regex بالكامل في متصفحك. فنمطك ونص عيّنتك يبقيان على جهازك ولا يُرفعان أبدًا، لذا فمن الآمن لصق بيانات حساسة.
أي نكهة regex تستخدمها هذه الأداة؟
تستخدم محرّك regex الخاص بـ JavaScript المدمج في متصفحك. وبناء الجملة الأساسي يطابق ما تعرفه من معظم اللغات، رغم أن بعض الميزات المتقدمة تختلف قليلًا عن PCRE أو Python أو .NET.
ما الفرق بين المطابقة الجشعة والكسولة؟
المُكمِّمات افتراضيًا جشعة وتمسك أكبر قدر ممكن من النص. وإضافة علامة استفهام تجعلها كسولة، فتمسك أقل قدر ممكن. مثلًا، نمط نقطة ونجمة جشع، بينما نمط نقطة ونجمة وعلامة استفهام كسول.
كيف أطابق حرفًا خاصًا حرفيًا؟
اهرب منه بشرطة خلفية. فلمطابقة نقطة فعلية، اكتب شرطة خلفية ثم نقطة. وينطبق الأمر نفسه على الأحرف الوصفية الأخرى مثل الأقواس والأقواس المربعة وعلامة الزائد وعلامة الاستفهام.
لماذا لا يطابق نمطي أي شيء؟
الأسباب الشائعة هي راية عامة مفقودة، أو مرتكزات تثبّت المطابقة على موضع خاطئ، أو حرف خاص لم يُهرَب منه، أو مُكمِّمات جشعة تتجاوز الحدّ الذي توقعته. اختبر قطعة بقطعة للعثور على المُسبِّب.
هل يمكنني التقاط أجزاء من المطابقة؟
نعم. غلّف مقطعًا من النمط بين قوسين لإنشاء مجموعة التقاط. ويُبلَّغ عن كل مجموعة على حدة، ما يتيح لك استخراج حقول مثل السنة والشهر واليوم من تاريخ.
