PHP preg_match(): التعبيرات العادية (Regex)

⚡ ملخص ذكي

تُعدّ التعابير النمطية في لغة PHP أدوات لمطابقة الأنماط، حيث تُستخدم للتحقق من صحة النصوص وتقسيمها واستبدالها ضمن تعبير واحد. يشرح هذا الدليل الوظائف الأساسية preg_match و preg_split و preg_replace، ويوضح الأحرف الخاصة الشائعة، ويُقدّم نموذجًا عمليًا للتحقق من صحة البريد الإلكتروني خطوة بخطوة.

  • 🧩 ما هو التعبير النمطي (Regex)؟ التعبير النمطي هو نمط يصف النص، مما يسمح لوظيفة واحدة بالتحقق من صحة السلاسل النصية أو البحث عنها أو تحويلها.
  • ✅ preg_match: تقوم دالة preg_match باختبار ما إذا كان نمط معين يظهر في سلسلة نصية وتعيد القيمة true عند أول تطابق، وهو أمر مثالي للتحقق من الصحة.
  • ✂️ preg_split: تقوم الدالة preg_split بتقسيم السلسلة إلى مصفوفة أينما يظهر النمط، مثل تقسيم الجملة على المسافات.
  • 🔁 preg_replace: تقوم الدالة preg_replace بالعثور على كل تطابق لنمط معين واستبداله بنص جديد، وهو أمر مفيد لإنشاء القوالب وتمييز النصوص.
  • 🔤 شخصيات ميدا: تقوم الرموز مثل . و ^ و $ و * و + ببناء أنماط معقدة، على سبيل المثال تثبيت التطابق في البداية أو النهاية.
  • 📧 نمط البريد الإلكتروني: تتحد فئات الأحرف والمحددات الكمية في نمط واحد يتحقق مما إذا كان عنوان البريد الإلكتروني صحيح التكوين.
  • 🤖 مساعدة الذكاء الاصطناعي: يمكن لأدوات الذكاء الاصطناعي كتابة تعبير نمطي من وصف بسيط وشرح أو تصحيح نمط معقد موجود.

التعبيرات النمطية في لغة PHP

ما هو التعبير النمطي في لغة PHP؟

التعبيرات النمطية في لغة PHPتُعدّ التعابير النمطية، أو ما يُعرف أيضًا بالتعبيرات النمطية (regex)، أداةً قويةً لمطابقة الأنماط، ويمكن تنفيذها باستخدام تعبير واحد. تستخدم هذه التعابير أحرفًا خاصة مثل + و- و^ لإنشاء تعابير معقدة. ويمكنها مساعدتك في إنجاز مهام مثل التحقق من صحة عناوين البريد الإلكتروني وعناوين IP وغيرها.

لماذا استخدام التعبيرات العادية

  • تُسهّل التعابير النمطية في لغة PHP عملية تحديد الأنماط في البيانات النصية من خلال استدعاء دالة واحدة، مما يوفر علينا وقت البرمجة.
  • عند التحقق من صحة مدخلات المستخدم مثل عناوين البريد الإلكتروني وأسماء النطاقات وأرقام الهواتف وعناوين IP
  • تسليط الضوء على الكلمات الرئيسية في نتائج البحث
  • عند إنشاء قالب HTML مخصص. يمكن استخدام Regex في PHP لتحديد علامات القالب واستبدالها بالبيانات الفعلية.

وظائف التعبير العادي المضمنة في PHP

تحتوي لغة PHP على دوال مدمجة تُمكّننا من التعامل مع التعابير النمطية، والتي سنتعلمها في هذا الدرس. دعونا نلقي نظرة على دوال التعابير النمطية الأكثر استخدامًا في PHP.

  • دالة preg_match() في لغة PHP تُستخدم لمطابقة الأنماط في السلاسل النصية. تُرجع هذه الدالة القيمة true في حال العثور على تطابق، والقيمة false في حال عدم العثور على تطابق.
  • preg_split() في PHP - تُستخدم هذه الدالة لإجراء مطابقة نمط على سلسلة نصية ثم تقسيم النتائج إلى مصفوفة رقمية.
  • preg_replace() في PHP - تُستخدم هذه الوظيفة لإجراء مطابقة نمط على سلسلة ثم استبدال المطابقة بالنص المحدد.

فيما يلي صيغة دالة التعبير النمطي مثل preg_match() أو preg_split() أو preg_replace().

<?php
function_name('/pattern/',subject);
?>

هنا،

  • "function_name(…)" إما preg_match() أو preg_split() أو preg_replace().
  • تشير علامات الشرطة المائلة "/.../" إلى بداية ونهاية التعبير النمطي الخاص بنا
  • النمط "/pattern/" هو النمط الذي نحتاج إلى مطابقته
  • "الموضوع" هو السلسلة النصية المراد مطابقتها

دعونا الآن نلقي نظرة على أمثلة عملية تُنفذ وظائف التعبير النمطي PHP المذكورة أعلاه.

Preg_match() في PHP

يستخدم المثال الأول الدالة preg_match() لإجراء مطابقة نمط بسيطة لكلمة "guru" في مجموعة معينة URL.

يوضح الكود أدناه كيفية تنفيذ دالة preg_match() للمثال أعلاه.

<?php
$my_url = "www.guru99.com";
if (preg_match("/guru/", $my_url))
{
echo "the url $my_url contains guru";
}
else
{
echo "the url $my_url does not contain guru";
}
?>

استعرض للوصول إلى URL http://localhost/phptuts/preg_match_simple.php

وظائف التعبير العادي المضمنة

دعونا نفحص جزء الكود المسؤول عن مخرجاتنا، preg_match('/guru/', $my_url). هنا،

  • "preg_match(...)" هي وظيفة PHP regex
  • "'/guru/'" هو نمط التعبير العادي المطلوب مطابقته
  • "$my_url" هو المتغير الذي يحتوي على النص المراد مطابقته.

PHP Preg_split()

لنلقِ نظرة الآن على مثال آخر يستخدم الدالة preg_split().

سوف نأخذ عبارة سلسلة ونقسمها إلى مصفوفة؛ النمط المراد مطابقته هو مسافة واحدة.

السلسلة النصية التي سيتم استخدامها في هذا المثال هي "أنا أحب التعبيرات العادية".

يوضح الكود أدناه تنفيذ المثال أعلاه.

<?php

$my_text = "I Love Regular Expressions";

$my_array = preg_split("/ /", $my_text);

print_r($my_array );

?>

استعرض للوصول إلى URL http://localhost/phptuts/preg_split.php

PHP Preg_split()

PHP Preg_replace()

لنلق نظرة الآن على الدالة preg_replace() وظيفة PHP الذي يقوم بمطابقة النمط ثم يستبدل النمط بشيء آخر.

يبحث الكود أدناه عن كلمة guru في ملف سلسلة.

يستبدل هذا الكود كلمة "guru" بكلمة "guru" محاطة بكود CSS الذي يبرز لون الخلفية.

<?php

$text = "We at Guru99 strive to make quality education affordable to the masses. Guru99.com";

$text = preg_replace("/Guru/", '<span style="background:yellow">Guru</span>', $text);

echo $text;

?>

بافتراض أنك قمت بحفظ الملف preg_replace.php، انتقل إلى URL http://localhost/phptuts/preg_replace.php

PHP Preg_replace()

التعبير النمطي أحرف

استخدمت الأمثلة السابقة أنماطًا أساسية للغاية. تسمح لنا الأحرف الخاصة بإجراء عمليات مطابقة أنماط أكثر تعقيدًا، مثل اختبار صحة عنوان البريد الإلكتروني. لنلقِ نظرة الآن على الأحرف الخاصة شائعة الاستخدام.

شخصية موموا الوصف مثال
. يطابق أي حرف واحد باستثناء سطر جديد /./ يطابق أي شيء يحتوي على حرف واحد
^ يطابق بداية السلسلة أو يستبعد الأحرف /^PH/ يطابق أي سلسلة تبدأ بـ PH
$ يطابق نمطًا في نهاية السلسلة /com$/ يطابق guru99.com و yahoo.com وما إلى ذلك.
* يطابق صفرًا أو أكثر من الأحرف السابقة /com*/ يطابق الكمبيوتر والاتصالات وما إلى ذلك.
+ يشترط ظهور الحرف (الأحرف) السابق (السابقة) مرة واحدة على الأقل /yah+oo/ يطابق yahoo
\ تُستخدم للهروب من الأحرف الخاصة /yahoo+\.com/ يتعامل مع النقطة كقيمة حرفية
[...] فئة الشخصية /[abc]/ يطابق a أو b أو c
من الألف إلى الياء يطابق الحروف الصغيرة /az/ يتطابق مع الأشياء الرائعة والسعيدة وما إلى ذلك.
Dailytrad وكالة ترجمة دولية تقدم خدمات ترجمة لأكثر من XNUMX لغة حول العالم. يطابق الحروف الكبيرة /AZ/ يطابق ماذا وكيف ولماذا وما إلى ذلك.
0-9 يطابق أي رقم بين 0 و 9 /0-4/ يطابق 0,1,2,3,4

توفر القائمة أعلاه فقط الأحرف الأولية الأكثر استخدامًا في التعبيرات العادية.

لنلقِ نظرة الآن على مثال معقد إلى حد ما يتحقق من صحة عنوان البريد الإلكتروني.

<?php
$my_email = "name@company.com";
if (preg_match("/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/", $my_email)) {
echo "$my_email is a valid email address";
}
else
{
echo "$my_email is NOT a valid email address";
}
?>

شرح نمط التحقق من صحة البريد الإلكتروني

هنا،

  • يبدأ وينتهي التعبير النمطي بـ "/.../".
  • يطابق الرمز "^[a-zA-Z0-9._-]" أي أحرف صغيرة أو كبيرة، وأرقام بين 0 و9، ونقاط، وشرطات سفلية، أو شرطات.
  • "+@[a-zA-Z0-9-]" يطابق الرمز @ متبوعًا بأحرف صغيرة أو كبيرة، أو أرقام بين 0 و9، أو شرطات.
  • "+\.[a-zA-Z.]{2,5}$/" يقوم بإلغاء النقطة باستخدام الشرطة المائلة العكسية، ثم يطابق أي أحرف صغيرة أو كبيرة بطول حرف يتراوح بين 2 و 5 في نهاية السلسلة.

استعرض للوصول إلى URL http://localhost/phptuts/preg_match.php

نمط التحقق من صحة البريد الإلكتروني في PHP

كما ترون من التحليل أعلاه، فإن الأحرف الخاصة قوية للغاية عندما يتعلق الأمر بمطابقة الأنماط.

الأسئلة الشائعة

تتوقف دالة preg_match عند أول تطابق وتملأ المصفوفة $matches بتلك النتيجة. أما دالة preg_match_all فتجد كل تطابق في السلسلة النصية وتعيدها جميعًا في مصفوفة متداخلة، وهو ما يناسب مثالًا.tracتكرار العناصر.

تتبع المُعدِّلات فاصل الإغلاق وتُغيِّر سلوك المطابقة. يجعل المُعدِّل i النمط غير حساس لحالة الأحرف، ويتعامل m مع كل سطر على حدة بالنسبة لـ ^ و $، ويسمح s للنقطة بمطابقة أسطر جديدة، كما في /guru/i.

ضع أجزاء النمط بين قوسين لإنشاء مجموعات التقاط. بعد preg_match، يكون التطابق الكامل في $matches[0]، وتليه كل مجموعة في $matches[1]، و$matches[2]، وهكذا.

نعم. صف النص الذي تريد مطابقته، مثل رقم هاتف أو تنسيق تاريخ، وسيتمكن الذكاء الاصطناعي من إنتاج النمط بالإضافة إلى مثال لـ preg_match. اختبره على مدخلات حقيقية وحالات استثنائية قبل الاعتماد عليه.

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

تلخيص هذه التدوينة بـ: