🚀 احتراف التعبيرات النمطية Regular Expressions في PHP

اليوم سنتحدث عن واحدة من أقوى الأدوات في لغة PHP، وهي "التعبيرات النمطية" أو ما يعرف بـ Regular Expressions (Regex).

تخيل أنك تريد التأكد من أن المستخدم قد أدخل بريداً إلكترونياً صحيحاً، أو تريد البحث عن كلمة معينة داخل نص طويل جداً واستبدالها بكلمة أخرى. بدلاً من كتابة عشرات الشروط (if statements)، تتيح لك Regex القيام بذلك عبر "نمط" (Pattern) واحد بسيط. 📝


🔍 ما هي التعبيرات النمطية (Regex)؟

ببساطة، هي لغة مصغرة تُستخدم لوصف "شكل" النص الذي تبحث عنه. بدلاً من البحث عن كلمة "مرحبا" تحديداً، يمكنك البحث عن "أي كلمة تبدأ بحرف م وتنتهي بحرف ا"، وهذا ما يجعلها مرنة جداً في التعامل مع النصوص.

في PHP، نستخدم مكتبة تسمى PCRE (Perl Compatible Regular Expressions)، وهي المكتبة القياسية التي توفر دوال تبدأ دائماً بكلمة preg_.


🛠️ الرموز الأساسية في Regex (المكونات)

قبل أن نكتب الكود، يجب أن نعرف "الأبجدية" التي نفهم بها Regex. إليك أهم الرموز التي سنستخدمها في هذا الدرس:

  1. المحددات (Delimiters): أي نمط Regex في PHP يجب أن يكون محاطاً بعلامة، وأشهرها الشرطة المائلة /.

    • مثال: /pattern/
  2. الرموز الخاصة (Metacharacters):

    • . (النقطة): تعني "أي حرف واحد" (أي شيء ما عدا السطر الجديد).
    • ^ (علامة البداية): تعني أن النص يجب أن "يبدأ" بهذا النمط.
    • $ (علامة النهاية): تعني أن النص يجب أن "ينتهي" بهذا النمط.
    • \d: تعني "أي رقم" (Digit) من 0 إلى 9.
    • \w: تعني "أي حرف أو رقم أو شرطة سفلية" (Alphanumeric).
    • \s: تعني "أي مسافة بيضاء" (Space, Tab).

💻 الدالة preg_match(): البحث عن نمط

تُستخدم هذه الدالة للتحقق مما إذا كان النص يحتوي على النمط الذي حددناه أم لا. هي تعيد 1 إذا وجدته، و 0 إذا لم تجده.

القاعدة العامة: preg_match(pattern, string);

مثال عملي بسيط: لنفترض أننا نريد التأكد من أن النص يحتوي على رقم.

<?php
// The text we want to check
$text = "My order number is 12345";

// The pattern: look for any digit (\d)
// It is wrapped in / / delimiters
$pattern = "/\d/";

if (preg_match($pattern, $text)) {
    echo "Success: A number was found in the text!"; // سيتم تنفيذ هذا السطر
} else {
    echo "Error: No number found.";
}
?>

🔄 الدالة preg_replace(): استبدال النصوص

هذه الدالة رائعة جداً، فهي لا تبحث فقط، بل تقوم باستبدال أي جزء من النص يطابق النمط بنص آخر من اختيارك.

القاعدة العامة: preg_replace(pattern, replacement, string);

مثال عملي بسيط: لنفترض أن لدينا نصاً يحتوي على أرقام، ونريد استبدال كل الأرقام بكلمة "NUMBER".

<?php
// The original text
$text = "I have 2 apples and 5 oranges";

// The pattern: look for any digit (\d)
$pattern = "/\d/";

// The replacement text
$replacement = "NUMBER";

// Replacing all digits with the word NUMBER
$result = preg_replace($pattern, $replacement, $text);

echo $result; 
// Output: I have NUMBER apples and NUMBER oranges
?>

💡 نصائح ذهبية للمبتدئين في Regex

  1. لا تعقد الأمور: ابدأ دائماً بأنماط بسيطة جداً قبل الانتقال للأنماط المعقدة.
  2. التجربة: يمكنك استخدام مواقع مثل regex101.com لتجربة الأنماط قبل وضعها في كود PHP الخاص بك.
  3. الدقة: تذكر دائماً وضع المحددات / / حول النمط، فبدونها سيعطيك PHP خطأً برمجياً.