php : التعابير العادية

preg_replace : البحث و الإستبدال

آخر تحيين: 08-05-2014

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


لازلنا دائما مع التعابير العادية ، تعرّفنا على طريقة البحث عن نمط ما داخل النص باستعمال الدالة preg_match . سنتعرف على دالة أخرى لها وظيفة مختلفة ، و هي preg_replace .
تقوم الدالة preg_replace بالبحث عن نمط ما داخل النص ، ثم تستبدله بنص آخر .
تأخذ الدّالة خمسة قيم . سنبدأ بالثلاث الأساسية :

 preg_replace ($ijad, $tabdil, $text);
ijad$ : النص الذي سنبحث عنه
tabdil$ : النص الذي سيحل مكانه
text$ : النص الذي سنبحث فيه

لنأخذ المثال التالي : سنبحث عن كلمة "قط" في النص ، ثم نستبدلها بكلمة "أسد".

<?php
$text = "أجهز القط على فريسته ، في لمح البصر";
$ijad = "#قط#";
$tabdil = "أسد";

echo preg_replace($ijad, $tabdil, $text);
?>

ستحصلون على : أجهز الأسد على فريسته ، في لمح البصر
لنرى مثالا باستعمال التعابير العادية :
سنقوم باستبدال جميع مُكّونات النص بلا شيء . و سنحتفظ فقط بالأرقام و الحروف و الفراغات . أي أننا سنقوم بتنظيف النص من الرموز و الحركات إلخ

<?php 
$text = "a b '? c {d} e f 24 !";
$ijad = "#[^a-z0-9 ]+#i";  // إيجاد كل ماهو ليس حرفا أو رقما أو فراغا
$tabdil = ""; // استبداله بلا شيء

echo preg_replace($ijad, $tabdil, $text);
?>

النتيجة : a b c d e f 24


نُمثل الفراغ إذا كان داخل المصفوفة برمز "s\" مثال : #[\s]# أو بفراغ عادي مثال : #[ ]#
و برمز "#\s#" إذا كان خارج المصفوفة

مثال آخر ، سنستبدل جميع الفراغات في النص ، بعارضة أفقية "-" :

<?php 
$text = "a b    c       d";
$ijad = "#\s+#"; //  البحث  عن فراغ أ و أكثر
$tabdil = "-";

echo preg_replace($ijad, $tabdil, $text);

// a-b-c-d : النتيجة 
?>

قمنا بالبحث عن نمط واحد و استبدلناه بآخر . يمكننا تطبيق ذلك أيضا على الجداول . في المثال التالي سنستبدل مجموعة من الأنماط في نفس الوقت :

<?php
// # المثال الأول
$text = "a1 b2 c3 ";
$ijad = array("#1#" , "#2#", "#3#");  
$tabdil = array ("A" , "B", "C");

echo preg_replace($ijad, $tabdil, $text);
// aA bB cC : النتيجة

// ## المثال الثاني
$text = "a1 b2 c3";
$ijad = array("#1#" , "#2#", "#3#", "#\s+#"); 
$tabdil = array ("A" , "B", "C", "-");

echo '<br>';
echo preg_replace($ijad, $tabdil, $text);
// aA-bB-cC  : النتيجة

// ### المثال الثالث
$text = "a b '? c {d} ! e f";
$ijad = array("#[^a-z0-9 ]+#i" , "#\s+#");  
$tabdil = array ("" , "-");

echo '<br>';
echo preg_replace($ijad, $tabdil, $text);
// a-b-c-d-e-f : النتيجة
?>

قيم الدالة preg_replace

رأينا ثلاث قيم للدالة preg_replace . في الحقيقة ، استعملنا قيمة رابعة ، دون أن ندري . و هي قيمة تلقائية نُمثّلها برقم "1-" .

preg_replace($ijad, $tabdil, $text, -1);

القيمة "1-" ، تعني إيجاد و استبدال جميع النصوص المطابقة للأنماط . في هذه الحالة سواء أضفنا القيمة "1-" ، أم لم نضفها فهي تعني نفس الشيء .
أمّا في حالة إذا أردنا إيجاد و استبدال عدد معين من النصوص . سنكتب بكل بساطة العدد الذي نريده ، كقيمة رابعة .

<?php 
// # المثال الأول : استبدال جميع الأنماط
$text = "A B C D E";
$ijad = "#\s+#";  
$tabdil = "-";

echo preg_replace($ijad, $tabdil, $text, -1);
// A-B-C-D-E : النتيجة
echo '<br>';
// # المثال الثاني: استبدال نمطين فقط
echo preg_replace($ijad, $tabdil, $text, 2);
// A-B-C D E : النتيجة
?>

بالنسبة للقيمة الخامسة ، فهي تهتم باحتساب عدد التبديلات التي أجريناها . مثال :

<?php 
$text = "A B C D E";
$ijad = "#\s+#";  
$tabdil = "-";

$count=0; // تحيين العداد
echo preg_replace($ijad, $tabdil, $text, -1, $count);
echo '<br>';
echo 'عدد التبديلات التي قمت بها ، هو : ';
echo $count;

// النتيجة :
// A-B-C-D-E
//عدد التبديلات التي قمت بها ، هو :4
?>

لفهم الدّور الوظيفي للدالة preg_replace ، سندرس في الدّرس الموالي ، مثال إنشاء لغة الببكود . لإتاحة أعضاء موقعكم الإستفادة بطريقة آمنة ، من استعمال وسوم لغة html أثناء إضافة الردود أو المواضيع