التعبيرات النمطية
التعبيرات النمطية في بي إتش بي هي أداة قوية لمعالجة النصوص والتحقق من الأنماط داخل السلاسل النصية. تُعرف التعبيرات النمطية (Regular Expressions) بأنها سلسلة من الرموز تُستخدم لتعريف نمط معين يمكن البحث عنه أو التحقق منه داخل نصوص، مثل التحقق من صحة البريد الإلكتروني، أو استخراج الأرقام من نص، أو تعديل نصوص بشكل ديناميكي. تعتبر التعبيرات النمطية مهمة جدًا في تطوير تطبيقات بي إتش بي لأنها توفر وسيلة فعّالة للتعامل مع البيانات النصية المعقدة، مما يقلل الحاجة لكتابة حلقات وعمليات تحقق طويلة ومكررة.
في بي إتش بي، يمكن استخدام التعبيرات النمطية مع دوال مثل preg_match، preg_replace، و preg_split لتنفيذ عمليات البحث، الاستبدال، أو تقسيم النصوص. يعتمد استخدام التعبيرات النمطية على فهم عميق للتركيب النحوي الخاص بها، بما في ذلك الرموز الخاصة، مجموعات الأحرف، والكوادر الشرطية، إلى جانب دمجها مع الهياكل البيانية والخوارزميات لتحقيق أفضل أداء.
من خلال هذا الدرس، سيتعلم القارئ كيفية كتابة التعبيرات النمطية بشكل صحيح، فهم البنية النحوية في بي إتش بي، التعامل مع البيانات النصية الكبيرة، وتطبيق مبادئ البرمجة الكائنية إذا لزم الأمر لتحسين تصميم النظام. كما سيتم التركيز على تجنب الأخطاء الشائعة مثل التسريبات الذاكرية، التعامل غير الصحيح مع الأخطاء، واستخدام خوارزميات غير فعالة. في سياق تطوير الأنظمة، تعتبر التعبيرات النمطية جزءًا أساسيًا من أدوات المطور لتحليل البيانات ومعالجة النصوص بكفاءة وأمان ضمن هندسة البرمجيات الحديثة.
مثال أساسي
php<?php
// مثال أساسي على التعبيرات النمطية في بي إتش بي
$text = "رقم الهاتف الخاص بي هو 0555123456 والبريد الإلكتروني [email protected]";
// البحث عن الأرقام داخل النص
preg_match_all('/\d+/', $text, $numbers);
echo "الأرقام الموجودة: ";
print_r($numbers[0]);
// البحث عن البريد الإلكتروني
if (preg_match('/[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/', $text, $email)) {
echo "تم العثور على البريد الإلكتروني: " . $email[0];
} else {
echo "لا يوجد بريد إلكتروني صالح.";
}
?>
في المثال أعلاه، نبدأ بتعريف نص يحتوي على رقم هاتف وبريد إلكتروني. ثم نستخدم دالة preg_match_all للبحث عن جميع الأرقام داخل النص. التعبير النمطي \d+ يعني البحث عن واحدة أو أكثر من الأرقام المتتالية، والنتيجة تخزن في مصفوفة $numbers، والتي يمكن طباعتها باستخدام print_r لعرض جميع الأرقام المستخرجة.
بعد ذلك، نستخدم preg_match للبحث عن نمط البريد الإلكتروني. التعبير النمطي المستخدم يتضمن مجموعات من الأحرف والأرقام والرموز المقبولة في البريد الإلكتروني، متبوعًا بعلامة @ ثم نطاق يحتوي على أحرف وأرقام، وأخيرًا امتداد من 2 إلى 4 أحرف. إذا تم العثور على تطابق، يتم طباعته، وإلا يتم عرض رسالة بعدم وجود بريد إلكتروني صالح.
هذا المثال يوضح كيفية تطبيق التعبيرات النمطية في بي إتش بي على بيانات نصية حقيقية، وكيفية استخدام الدوال المدمجة بشكل صحيح مع مراعاة الأداء والتعامل مع الحالات المختلفة. كما يُظهر المبادئ الأساسية للتعامل مع النصوص الكبيرة، واستخدام الأنماط للتحقق من صحة البيانات، وهي مهارة مهمة جدًا لتطوير تطبيقات بي إتش بي معقدة وموثوقة.
مثال عملي
php<?php
// مثال عملي لتطبيق التعبيرات النمطية في مشروع بي إتش بي
class Validator {
private string $patternEmail = '/^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/';
private string $patternPhone = '/^\d{10}$/';
public function validateEmail(string $email): bool {
return preg_match($this->patternEmail, $email) === 1;
}
public function validatePhone(string $phone): bool {
return preg_match($this->patternPhone, $phone) === 1;
}
}
// الاستخدام
$validator = new Validator();
$emails = ["[email protected]", "invalid-email"];
$phones = ["0555123456", "12345"];
foreach ($emails as $email) {
echo $email . " صالح؟ " . ($validator->validateEmail($email) ? "نعم" : "لا") . "\n";
}
foreach ($phones as $phone) {
echo $phone . " صالح؟ " . ($validator->validatePhone($phone) ? "نعم" : "لا") . "\n";
}
?>
في المثال العملي، أنشأنا فئة Validator تحتوي على خصائص لتخزين التعبيرات النمطية للبريد الإلكتروني ورقم الهاتف. هذا النهج يوضح دمج مبادئ البرمجة الكائنية مع التعبيرات النمطية في بي إتش بي، مما يسمح بإعادة استخدام الكود وتنظيمه بشكل أفضل.
دوال validateEmail و validatePhone تستخدم preg_match للتحقق من صحة المدخلات، وتعطي نتيجة منطقية true أو false. في الحلقة foreach، نتحقق من قائمة من البريد الإلكتروني وأرقام الهواتف، ونطبع نتيجة التحقق لكل عنصر.
هذا النهج يعزز من تطبيق أفضل الممارسات في بي إتش بي، مثل فصل المنطق في فئات، تجنب تكرار الكود، ومعالجة البيانات بشكل آمن وفعال. كما أنه يساعد المطورين على إدارة الأنماط المعقدة بطريقة منظمة، ويقلل من الأخطاء الشائعة مثل التعامل غير الصحيح مع النصوص أو فشل التحقق من صحة البيانات.
Code Example 7
جدول مرجعيبي إتش بي Element/Concept|Description|Usage Example
\d|مطابقة أي رقم|preg_match('/\d/', '123')
\w|مطابقة أي حرف أو رقم أو underscore|preg_match('/\w/', 'abc_123')
+|مطابقة واحد أو أكثر من العناصر السابقة|preg_match('/\d+/', '12345')
*|مطابقة صفر أو أكثر من العناصر السابقة|preg_match('/a*/', 'aaab')
^|تحديد بداية السلسلة|preg_match('/^Hello/', 'Hello World')
$|تحديد نهاية السلسلة|preg_match('/World$/', 'Hello World')
أفضل الممارسات في بي إتش بي عند استخدام التعبيرات النمطية تشمل كتابة أنماط واضحة ومحددة، استخدام الدوال المدمجة مثل preg_match و preg_replace بحكمة، وفصل منطق التحقق في فئات أو دوال قابلة لإعادة الاستخدام. يجب الانتباه لتجنب الأخطاء الشائعة مثل تسريبات الذاكرة عند التعامل مع النصوص الكبيرة، أو كتابة أنماط غير فعالة تؤثر على أداء التطبيق.
كما يُنصح باستخدام أدوات اختبار الأنماط Regex Tester للتحقق من صحة التعبيرات قبل دمجها في المشروع. لضمان الأداء والأمان، يجب معالجة المدخلات بعناية وتجنب السماح للمدخلات الضارة بالمرور إلى الأنماط، خاصة عند استخدامها مع إدخالات المستخدم. تحسين الأداء يمكن تحقيقه عبر تقليل التعقيد غير الضروري للأنماط، وتجنب الحلقات غير اللازمة، واستخدام الخرائط أو المصفوفات عند الحاجة لتحليل البيانات النصية الكبيرة.
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى