سأحاول هنا و بإختصار شديد نشر بعض النقاط المهمة التي تساعدنا و تمكنا في التوغل برفق في بحر التعابير القياسية. آمل أن أوفق في إيصال المعلومة.
الشرح سيكون بدون إسهاب و في شكل نقاط مختصرة جدا. و ذلك نسبة لتشعب الموضوع
سأحاول هنا و بإختصار شديد نشر بعض النقاط المهمة التي تساعدنا و تمكنا في التوغل برفق في بحر التعابير القياسية. آمل أن أوفق في إيصال المعلومة.
الشرح سيكون بدون إسهاب و في شكل نقاط مختصرة جدا. و ذلك نسبة لتشعب الموضوع
__________________
شبكة ومنتديات مسدار
تستخدمنوعين من هذه التعابير هما :كود PHP:
PHP
- Portable Operating System Interface - POSIX
النوع الثاني هو الأكثر استخداماً نسبة لقوته و سرعته
- Perl Compatible Regular Expressions - PCRE
الدوال الأكثر استخداماً :
كود PHP:
preg_match()
preg_match_all()
preg_replace()
preg_replace_callback()
preg_grep()
preg_split()
preg_last_error()
preg_quote()
ereg()
eregi()
__________________
شبكة ومنتديات مسدار
أولاً المعرّفة caret
في الكيبورد توجد في المفتاح رقم 6كود PHP:
^
لها استخدامين داخل الأقواس و خارج الأقواس
سنبدأ أولاً بإستخدامها خارج الأقواس
استخدامها : هي تبحث في النص إبتدا من أوله و بالترتيب
مثال لها :
لاحظ أننا وضعنا المعرّفة ^ بدون أقواس.كود PHP:
$a = "Swalif is my favorite forum";
if(eregi("^Swalif", $a)){
echo "Yes, it is";
}else{
echo "No, it is not";
}
أننا بدأنا بحثنا عن كلمة Swalif و هي أول كلمة في المتغير a$
الدالة eregi هي case-insensitive أي غير حساسة لحالة الأحرف و تقبل الأحرف الصغيرة و الكبيرة معاً. Swalif أو swalif - في حالة أردنا حصر البحث يجب علينا استخدام الدالة ereg لأنها sensitive أي حساسة لحالة الأحرف.
المعرفة تقبل الكلمات حسب الترتيب شاملا ذلك المسافات
التعديل الأخير تم بواسطة مسدار ; 16-12-2008 الساعة 01:17 AM
__________________
شبكة ومنتديات مسدار
في حالة استخدامنا للدالة preg_match
يتوجب علينا حصر الكلمة المراد بحثها بين خطين مائلين two slashes
لا تشترط البحث في أول النص و لكنها تشترط البحث في أول الكلمة التي قمنا بتحديدها.
مثلاً :
لاحظ :كود PHP:
$a = "My favorite forum is Swalif";
$b = '/^Swalif/';
preg_match($b, substr($a,21), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
كلمة Swalif لم تكن في أول النص
المتغير a$ يحمل قيمة النص كاملاً
المتغير b$ يحمل قيمة الكلمة المراد البحث عنها
في السطر الثالث و حسب تكوين الدالة pregmatch وضعنا المتغير المراد البحث عنه أولاً مفصول بعلامة (الكوما) ثم حددنا موقع الكلمة من النص عن طريق الدالة ()substr بإعتبار أن كلمة Swalif تبعد مسافة 21 وحدة من أول النص ثم وضعنا (الكوما) ثم وضعنا المتغير matches$ و هو مطلوب دوماً في الدالة preg_match ثم وضعنا (الكوما) ثم وضعنا الفلاق PREG_OFFSET_CAPTURE و هو من مزايا الدالة preg_match ايضا.
__________________
شبكة ومنتديات مسدار
ثانيا : المعرّفة
علامة الدولار Dollar signكود PHP:
$
استخدامها : إذا كانت المعرّفة ^ تبحث لنا عن بداية النص متقدمة نحو الآخر
فإن علامة الدولار عكسها تماما، تبحث لنا في آخر النص متقدمة نحو البداية
مثال :
لاحظ :كود PHP:
$a = "My favorite forum is Swalif";
if(ereg("Swalif$", $a)){
echo "What is your favorite forum?";
}else{
echo "what is your friend favorite forum?";
}
يمكننا البحث عن الجملة forum is Swalif كاملة ما دامت منتهية بكلمة Swalif
__________________
شبكة ومنتديات مسدار
لاحظ:
ان المعرّفتين لا تبحثان في الكلمات و لكنهما تبحثان في الأحرف
مثلاً :
إذا اردنا البحث عن كلمة Swalif من الكلمة Swalifforum فإننا نستخدم المعرّفة ^ بإعتبار أن أحرف الكلمة واردة بالبداية. و إذا أردنا أن نبحث عن بقية الكلمة المتمثلة في كلمة forum فإننا نبحث عنها بالمعرفة $ بإعتبار أن أحرف الكلمة واردة بالنهاية. و في حالة أردنا الكلمة كاملة فإننا نجمع بين المعرّفتين معاً.
مثال :
كود PHP:
$a = "Swalifforum";
if(ereg("^Swalifforum$", $a)){
echo "Swalif!!!, I love it so much";
}else{
echo "I love all php forum except Swalif";
}
__________________
شبكة ومنتديات مسدار
ثالثاً : المعرّفة
لو افترضنا أن سألك أحد أصدقائك لتكتب له اسم سوالف بالإنجليزيكود PHP:
[.......]
ربما ستكتب له كلمة سوالف هكذا Swalif
و لكن لو سألوني أنا أن أكتب كلمة سوالف فإنني سأكتبها هكذا Swalef
الكلمتين صحيحتين في المعنى و لكن يختلفان في التركيبه الحرفية
السؤال هنا : كيف نجعل برمجتنا تقبل الكلمتين معاً
هذا يتم عن طريق الأقواس العادية [ ]
مثال توضيحي :
لاحظ :كود PHP:
$a = "Swalif";
$b = "/Swal[ie]f/";
if(preg_match($b, $a, $matches)){
echo $matches[0];
}else{
echo "We did not find these words in Swalif";
}
أن المتغير a$ يحمل قيمة النص
أن المتغير b$ يحمل القيمة المراد البحث عنها
الدالة preg_match ستبدأ البحث من حرف S ثم w ثم l ثم أحد الحرفين الموجودين داخل الأقواس ثم حرف f
سين سؤال : ماذا تعني الأقواس [ ] بكلمة Swal[ie]f
جيم جواب : الأقواس تفيدنا بما يلي :
تفيدنا بأن ما بداخل الأقواس يجب أن يكونان حرفين مطلوب أحدهما. فإذا نظرنا إلى قيمة المتغير a$ سنجد أن كلمة سوالف مكتوبة بحرف الـ ( i ) لذلك فإن الدالة preg_match ستأخذ حرف الـ ( i )و تترك حرف الـ ( e ) و تواصل في طباعة بقية لكلمة.
__________________
شبكة ومنتديات مسدار
المذيد من الاسئلة التوضيحية :
هذه المرة استخدمنا الأقواس مرتين في كلمة واحدة هي Swalifforumكود PHP:
$a = "Swalifforum";
$b = "/Swal[ie]ffor[uo]m/";
if(preg_match($b, $a, $matches)){
echo $matches[0];
}else{
echo "We did not find these words in Swalifforum";
}
في القوس الأول يمكننا طباعة احد الحرفين التاليين ie و في القوس الثاني يمكننا طباعة أحد الحرفين التاليين uo
__________________
شبكة ومنتديات مسدار
جزلك الله خير اخي علي الموضوع يارب تكمله وده تطبيق بسيط
جزاك الله الف خير اخيكود PHP:
$m="mohamedhelal";
if(ereg("^mohamed",$m))
{
echo"الكلمة في اول الكلمات";
}else
{
echo"الكلمة مش في اول الكلمات";
}
if(preg_match("/^mohamed/",$m))
{
echo"الكلمة في اول الكلمات";
}else
{
echo"الكلمة مش في اول الكلمات";
}
__________________
ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
لطلب البرمجة فقط
helal-egypt@hotmail.com
في حالة اردنا طباعة حرف S من كلمة Swalif ليكون حرف كبير (كابيتال) سيكون المثال كما يلي :
الحرف الأول (حرف S) وضعنا له قيمتان - إما حرف كبير أو حرف صغيركود PHP:
$a = "Swalif";
$b = "/[Ss]walif/";
if(preg_match($b, $a, $matches)){
echo $matches[0];
}else{
echo "Please keep swalif with small letter";
}
__________________
شبكة ومنتديات مسدار
لو افترضنا أن أرقام الجوالات في المملكة العربية السعودية تبدأ بالرقم 05
يمكننا أن نكتب أن رقم الجوال يبدأ بالرقم 5 و ليس هنالك أي داعي لكتابة الرقم 0 في الأول. لأنه معروف لدينا أن أي رقم جوال يبدأ بالرقم 0
مثال :
لاحظ :كود PHP:
$a = "051234567";
$b = "/[0 ]51234567/";
if(preg_match($b, $a, $matches)){
echo $matches[0];
}else{
echo "Please keep swalif with small letter";
}
أن هنالك قيمتين داخل الأقواس هي 0 و المسافة الفاضية (space)
و هذا يفيدنا بأن الجوال بالمملكة يبدأ بالرقم 5 أو 05
__________________
شبكة ومنتديات مسدار
أنظر للمثال التالي لترى فعالية الأقواس :
لاحظ :كود PHP:
$swalifterms = "12";
if(ereg("[0-9]", $swalifterms)){
echo "You are too young to register in Swalif";
}else{
echo "plz tell us accurately, what is your real age";
}
أن المتغير $swalifterms يحمل القيمة 12 و هي قيمة تشتمل على أرقام
في حالة اضافة أي حرف للرقم 12 ستظل القيمة رقمية مالم تدخل عليها بعض المعرفات الأخرى (سنستعرض ذلك لاحقا)
المعرّفة [9-0] تبحث لنا عن الأرقم من 0 إلى 9 (سوف نستعرض هذه المعرّفة لاحقاً)
__________________
شبكة ومنتديات مسدار
مثال مشابه :
المعرّفة [a-z] تبحث لنا عن الأحرف الصغيرة فقطكود PHP:
$forum = "swalif";
if(ereg("[a-z]", $forum)){
echo "Swalif always stand first";
}else{
echo "Swalif sometimes fail to stand first";
}
__________________
شبكة ومنتديات مسدار
مثال مشابه :
المعرّفة [A-Z] تبحث لنا عن الأحرف الكبيرة فقطكود PHP:
$forum = "swalif";
if(ereg("[A-Z]", $forum)){
echo "Swalif always stand first";
}else{
echo "Swalif sometimes fail to stand first";
}
__________________
شبكة ومنتديات مسدار
مثال مشابه :
المعرّفة [a-z0-9] تبحث لنا عن الأحرف الصغيرة مع الأرقم من 0 إلى 9 فقطكود PHP:
$forum = "swalif";
if(ereg("[a-z0-9]", $forum)){
echo "Swalif always stand first";
}else{
echo "Swalif sometimes fail to stand first";
}
__________________
شبكة ومنتديات مسدار