التعبيرات المنتظمة في PHP مع أمثلة: عمليًا

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التعبيرات المنتظمة في PHP: من النظرية إلى التطبيق

\n\n

التعبيرات المنتظمة (regex أو regexp) هي أداة قوية للبحث والاستبدال والتحقق من السلاسل النصية وفق نمط معين. في PHP، يتم تنفيذها من خلال مجموعة دوال PCRE (Perl Compatible Regular Expressions) وتسمح بحل مشاكل بأي درجة من التعقيد: من التحقق من صحة البريد الإلكتروني إلى تحليل كود HTML. في هذه المقالة، سنشرح بناء الجملة، والدوال الأساسية، ونستعرض أمثلة عملية ستكون مفيدة لكل مطور PHP.

\n\n

1. أساسيات بناء جملة التعبيرات المنتظمة في PHP

\n\n

أي تعبير منتظم في PHP يُوضع بين محددات (عادةً شرطات مائلة /). بعد المحدد الختامي، يمكن إضافة معدلات — وهي علامات تغير سلوك البحث.

\n\n
$pattern = '/نمط/معدلات';
\n\n

الرموز الوصفية الأساسية:

\n
    \n
  • . — أي حرف فردي (باستثناء سطر جديد)
  • \n
  • * — صفر أو أكثر من تكرارات الحرف السابق
  • \n
  • + — تكرار واحد أو أكثر
  • \n
  • ? — صفر أو تكرار واحد (يجعل المُعدِّل كسولًا)
  • \n
  • ^ — بداية السطر
  • \n
  • $ — نهاية السطر
  • \n
  • \\d — رقم (0-9)
  • \n
  • \\w — حرف أو رقم أو شرطة سفلية
  • \n
  • \\s — حرف مسافة بيضاء
  • \n
  • [] — فئة أحرف (مثل [a-z])
  • \n
  • () — مجموعة للالتقاط
  • \n
\n\n

المعدلات الشائعة:

\n
    \n
  • i — بحث غير حساس لحالة الأحرف
  • \n
  • m — وضع متعدد الأسطر (^ و $ يعملان لكل سطر)
  • \n
  • u — دعم UTF-8 (إلزامي للسيريلية)
  • \n
  • s — النقطة تلتقط أيضًا سطرًا جديدًا
  • \n
\n\n

2. دالة preg_match(): البحث عن التطابقات

\n\n

preg_match() — هي الدالة الأكثر شيوعًا. تتحقق مما إذا كانت السلسلة النصية تطابق النمط، وتعيد 1 (يوجد تطابق) أو 0 (لا يوجد). المعامل الثالث هو مصفوفة تُسجل فيها التطابقات التي تم العثور عليها.

\n\n

مثال 1. التحقق من عنوان البريد الإلكتروني

\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

مثال 2. استخراج البيانات من سلسلة نصية

\n
<?php\n$text = "رقمي: +7 (999) 123-45-67";\n$pattern = '/\\+7\\s*\\(\\d{3}\\)\\s*\\d{3}-\\d{2}-\\d{2}/u';\n\nif (preg_match($pattern, $text, $matches)) {\n    echo "تم العثور على الرقم: " . $matches[0];\n}\n// الإخراج: تم العثور على الرقم: +7 (999) 123-45-67\n?>
\n\n

لاحظ: المُعدِّل u إلزامي إذا كانت السلسلة تحتوي على أحرف سيريلية أو رموز يونيكود خاصة.

\n\n

3. دالة preg_replace(): الاستبدال وفق النمط

\n\n

preg_replace() تبحث في السلسلة النصية عن جميع التطابقات مع النمط وتستبدلها بالنص المحدد. يمكن استخدام مجموعات الالتقاط $1، $2، إلخ لاستبدال أجزاء من النص الأصلي.

\n\n

مثال 3. تنسيق رقم الهاتف

\n
<?php\n$phone = "89991234567";\n$pattern = '/(\\d{1})(\\d{3})(\\d{3})(\\d{2})(\\d{2})/';\n$replacement = '+7 ($2) $3-$4-$5';\n\n$formatted = preg_replace($pattern, $replacement, $phone);\necho $formatted; // +7 (999) 123-45-67\n?>
\n\n

مثال 4. تنظيف HTML من الوسوم (باستثناء المسموح بها)

\n
<?php\n$html = "<b>عريض</b> <script>alert('xss')</script> نص";\n$pattern = '/<\\s*\\/?\\s*(?!b|i|u|a\\b)[^>]*>/ui';\n\n$clean = preg_replace($pattern, '', $html);\necho $clean; // <b>عريض</b>  نص\n?><                

المدونات

توصيات الكتب