التعبيرات النمطية في PHP: ما هي ولماذا نحتاجها؟
\n\nالتعبيرات النمطية (regex) هي أداة قوية للبحث والاستبدال والتحقق من السلاسل النصية وفقًا لنمط معين. في PHP، يتم تنفيذها من خلال مجموعة من الدوال التي تتيح للمطور العمل بمرونة مع البيانات النصية. بالنسبة للمبتدئين، قد يبدو هذا الموضوع معقدًا، لكنه عمليًا يبسط بشكل كبير معالجة النماذج، والتحقق من صحة البريد الإلكتروني، وتحليل عناوين URL، والعديد من المهام الأخرى.
\n\nفي هذه المقالة، سنشرح بناء الجملة الأساسي للتعبيرات النمطية في PHP، ونستعرض الدوال الرئيسية، ونقدم أمثلة واضحة لكل منها.
\n\n1. أساسيات بناء جملة التعبيرات النمطية
\n\nالتعبير النمطي في PHP هو سلسلة نصية محاطة بمحددات (غالبًا ما تكون شرطة مائلة /). داخل هذه السلسلة توجد رموز خاصة (رموز وصفية) ورموز عادية.
الرموز الوصفية الأساسية
\n\n- \n
.— أي حرف، باستثناء سطر جديد. \n ^— بداية السلسلة. \n $— نهاية السلسلة. \n *— صفر أو أكثر من تكرارات الحرف السابق. \n +— تكرار واحد أو أكثر. \n ?— صفر أو تكرار واحد. \n \\d— أي رقم (مكافئ لـ [0-9]). \n \\w— أي حرف أو رقم أو شرطة سفلية. \n \\s— أي حرف مسافة بيضاء. \n []— فئة من الأحرف (مثل [a-z] — جميع الأحرف اللاتينية الصغيرة). \n ()— تجميع. \n
مثال على نمط بسيط
\n\nلنفترض أننا نريد التحقق مما إذا كانت السلسلة تحتوي على كلمة "php". سيكون أبسط نمط كالتالي:
\n\n/php/\n\nسيبحث هذا النمط عن السلسلة الفرعية "php" في أي مكان في السلسلة (على سبيل المثال، لن يجدها في "PHP" لأن حالة الأحرف مهمة). لجعل البحث غير حساس لحالة الأحرف، نستخدم المعدل i:
/php/i\n\nالآن سيتطابق النمط مع "PHP" و"Php" و"php".
\n\n2. الدوال الرئيسية للعمل مع التعبيرات النمطية في PHP
\n\nتوفر PHP عدة دوال رئيسية. سننظر في الثلاثة الأكثر شيوعًا: preg_match وpreg_replace وpreg_split.
2.1. preg_match — التحقق من التطابق
\n\nتتحقق الدالة preg_match مما إذا كانت السلسلة تتطابق مع النمط. ترجع 1 إذا تم العثور على تطابق، و0 في الحالة المعاكسة. يمكن أيضًا تمرير وسيطة ثالثة — مصفوفة يتم فيها تخزين جميع التطابقات التي تم العثور عليها.
مثال: التحقق من البريد الإلكتروني
\n\n<?php\n$email = "user@example.com";\n$pattern = "/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/";\n\nif (preg_match($pattern, $email)) {\n echo "البريد الإلكتروني صحيح!";\n} else {\n echo "البريد الإلكتروني غير صحيح!";\n}\n?>\n\nشرح النمط:
\n- \n
^— بداية السلسلة. \n [a-zA-Z0-9._-]+— حرف واحد أو أكثر: أحرف لاتينية، أرقام، نقطة، شرطة سفلية أو شرطة. \n @— الرمز "@" الإجباري. \n [a-zA-Z0-9.-]+— اسم النطاق. \n \\.— نقطة هاربة. \n [a-zA-Z]{2,}— نطاق المستوى الأعلى (حرفان على الأقل). \n $— نهاية السلسلة. \n
2.2. preg_replace — الاستبدال وفقًا لنمط
\n\nتبحث الدالة preg_replace عن التطابقات مع النمط وتستبدلها بسلسلة محددة. هذا مفيد بشكل خاص لتنظيف البيانات أو تنسيق النص.
مثال: إزالة جميع الأرقام من سلسلة
\n\n<?php\n$text = "رقمي: 123-456-7890";\n$pattern = "/\\d+/";\n$replacement = "[أرقام]";\n\n$result = preg_replace($pattern, $replacement, $text);\necho $result; // سيطبع: "رقمي: [أرقام]-[أرقام]-[أرقام]"\n?>