النمط (pattren)
ماهو النمط ؟ مارأيك إذا كتب المستخدم جملة في مربع نص تحتوي على عدة كلمات وتريد أن تتأكد من وجود كلمة معينة وسط هذه الجملة ، على حسب ما اخذناه من معلومات على المصفوفات سابقاً نستطيع فعل ذلك كالتالى :
كود:
<?
$words=”one, two, three, four, five,”;
$ty =explode (“”,$ty);
foreach ($ty as $w) { 
	if ($w = =  “six”) echo “found string ‘two’”;
} 
?> 
لقد كان
المتغير $words يحتوي على جملة تتكون من عده كلمات وعندما أردنا فحصه قمنا باستخلاصه في مصفوفة ثم بعد ذلك قمنا بفحص المصفوفة باستخدام التكرار foreach ، ومع ذلك الذي فعلناه فإن هذا الاستخدام غير عملي بتاتاً وهنا تبرز قوه Regular Expressions لاحظ الآن كيف نستخرجه بواسطة الـ Regular Expressions :
كود:
<?
$words=”one, two, three, four, five,”;
if (ereg(“one”,$words)) echo “لقد وجدت العدد  ‘ one’ “ ; 
?>
في هذا المثال قمنا باستخدام الدالة (ereg) ووضعنا في خانتها الأولى النمط (pattern) الذي نريد أن نتأكد من وجوده (أوالكلمة المراد البحث عنها) ووضعنا في الخانة الثانية المتغير الذي سيتم البحث فيه عن الكلمة أو النمط .
تقوم الدالة ereg بإعطاء القيمة true إذا تم العثور على الكلمة .
في الواقع هناك استخدامات أكثر فعالية للأنماط .
يمكننا مثلاً تخزين الكلمة إذا تم وجودها في مصفوفة خاصة كالتالى :
كود:
<?
$words=”one, two, one, four, five,”;
if (ereg(“one”,$words,$rok))  ;
echo $rok[0];
echo $rok[1];  
?>
نقوم بوضع اسم المصفوفة التي نريد تخزين البيانات في الخانة الثالثة .. لاحظ مع أنه يوجد كلمتين في الجملة توافق النمط إلا انه أعطانا كلمة واحدة فقط إذ أن وظيفته أن يتأكد من وجود النمط في الجملة فقط فإذا تأكد من وجودها مرة واحدة استكفى واعتبر الموضوع قد انتهي .


ماذا لو أردنا من التأكد من عدة كلمات ، عند ذلك فإننا نفعل التالى :
كود:
<? 
$words=”one, two, one, four, five,”;
if (ereg(“one”,$words,$rok))  echo $rok[0];
if (ereg(“two”,$words,$rok))  echo $rok[0];
?>
واريد أن أنبهك أن الـereg يقوم بإنشاء المصفوفة من جديد عند كل استعمال له فخذ حذرك من هذه النقط
أيضا فإن الـereg حساس لحالة الأحرف لاحظ هذا المثال :
كود:
<?
$words="one, two, vcx, four, five,";
if (ereg("One",$words,$rok))  echo $rok[0];
?>
لن يقوم بإخراج أي شي فقط لأن حرف الـO مختلف .


أيضا يمكنك البحث عن كلمة يسبقها فراغ مثلاً كالتالى :
كود:
<?
$words="one, two, vcxone, four, five,";
if (ereg("one",$words,$rok))  echo $rok[0];
?>
مثال آخر :
كود:
<?
$words="oned, two, vcxone, four, five,";
if (ereg("one",$words,$rok))  echo $rok[0];
?>
لاحظ في هذين المثالين أنه مع أن كلمة one غير موجودة بمفردها إنما موجودة كجزء من vcxone و oned ورغم ذلك فإن الدالة لم تأخذ اعتبارا لذلك بينما لو كتبنا كالتالى :
كود:
<?
$words="oned, two, vcxone, four, five,";
if (ereg(" one",$words,$rok))  echo $rok[0];
?>
فإنه سيبحث عن الكلمة مفصولة عن أي حرف ولن يجد كلمة كذلك فلن يقوم بكتابة أي شي .


يمكننا أن نفحص قيمة موجودة في متغير كالتالى :
كود:
<?
$reu = "one";
$words="one, two, vcxone, four, five,";
if (ereg($reu,$words,$rok))  echo $rok[0];
?>
هل لاحظت أننا فحصنا قيمة المتغير $rue بواسطة ereg مع $word ولم يتطلب منا ذلك أي شي إضافي غير اسم المتغير المراد البحث عن قيمته في الجمله .


يمكننا بالـ Regular Expression استعمال بعض الأحرف بشكل خاص التي لها استعمالها الخاص بواسطة الـ Regular Expressions


الأحرف الخاصة في الـ Regular Expression هي كالتالى :
كود:
. * ? + [ ] ( ) { } ^ $ | \
هذه الأحرف لها معناها الخاص في الـ Regular Expression


فقديماً مثلاً كنا نقول أنه لا يمكننا أن نستخدم علامتي تنصيص متداخلة من نفس النوع كالتالى :
كود:
<?
$r=”u\””;
?>
ولكي يتجاهل الـPHP هذا المعني فإننا نقوم بوضع (\) قبل علامة التنصيص .
ايضا مع الـ ereg فإن للـ(.) قداستها ولكي يتم تجاهلها فإننا نستخدم الـ(\)


تقوم الـ(.) بأخذ مكان حرف أو فراغ فمثلاً لاحظ المثال التالى :
كود:
<?
$P="I love yamen";
if (ereg ("love....",$P,$R)) echo $R[0];
?>
هل لاحظت الناتج ؟؟


ولكي يتم تجاهل قداسة الـ(.) في الـ Regular Expressions نقوم بوضع (\) قبلها . مثال :
كود:
<?
$P="I love yamen";
if (ereg ("love\.\.\.\.",$P,$R)) echo $R[0];
?>
في هذا المثال لن يتم طباعة أي شي لأنه لايوجد أي كلمة تطابق (love....) لأن الـ(.) فقدت قداستها وبدأ التدقيق في الكلمة حرفاً حرفاً .