مقدمه عن التعابير القياسيه ( Regular Expressions )

مفهوم – تدعم لغة PHP نوعان من التعابير القياسيه , وهي POSIX و PERL , الاول يكون مدمج مع اللغه تلقائيا ولكن الاخر يحتاج الى ان تقوم بتنصيبه ,, لا تقلق فعند استخدامك التنصيب العادي للغة سوف يتم وضع الاثنان معا , يعتبر النوع الاول اسهل في التعلم والطبيق من النواع الثاني , ويتم ترجمته وتشغيله اسرع ,, ولكنه ليس امن كالثاني . جميع ما تعلمناه في الدرس السابق كان عباره عن مقانرة نصوص متطابقه او اجزاء من النصوص ولكن ماذا لو احتجنا الى ان نقوم بشيئ اكثر من ذلك ,, فالتعابير القياسيه هي مبتغانا ,, وسوف نقم بالتعلم عليها والتطبيق عليها.

الاساسيات:

التعابير القياسيه هي طريقة لوضع او شرح نمط معين مكرر في نص , فالعباره ( email )
تساوي في التعابير القياسيه ( mail ) و ( ma ) و ( i ). لكن مع استخدام التعابير القياسيه يمكننا المقارنه بالطرق التاليه ,, يقع الحرف في اول النص , الاخر , الوسط , وغير ذلك من الطرق التي سنتطرق لها

الاحرف والتصانيف:

لنأخذ امثله لكي نفهم الاحرف والتصانيف , لو استخدمنا الحرف ( . ) فهذا يقوم بمطابقة اي حرف اخر غير علامة السطر الجديد (  ) , فلو قلنا نريد ان نقوم بمطابقة .at
فسوف يكون النتاج كالتالي , cat و mat و sat . لكن هذه الطريقه سوف تقوم ايضا بفرض ان #at نريده مع المقارنه , لكن هناك حل بأن نقوم بجعل المطلوب فقط احرف بالطريقه التاليه [a-z] ارأيت السهوله ؟ مثلا لو اردنا احرف ( vowel ) في مجموعه , سوف نقوم بالتالي [aeiou] , ويمكن استخدام مدى كما فعلنا قبل قليل [a-z] او اكثر من مدى [a-zA-Z] وهذا معناه اي حرف من a الى z سواء كان في حالته الصغرى او الكبرى ( في اللغه الانجليزيه ) , ويمكن ايضا ان نخرج مدى من المقارنه كالتالي [^a-z] فهذا يقوم بمقارنة اي حرف غير a الى z فالعلامه ^ اذا وضعت بين الاقواس [] معناها ( not ) اي ( ليس ) , وضحت الفكره الان ؟ بجانب المدى الذي نقوم بتحديده , او نريد مدى معين في بالنا , هناك مدى معرف سابقا في لغة PHP , لاحظ الجدول التالي:

المدى

المعنى

[[:alnum:]]

كل الارقام

[[:alpha:]]

كل الاحرف

[[:lower:]]

كل الاحرف في النمط الصغير

[[:upper:]]

كل الاحرف في النمط الكبير

[[:blank:]]

فراغات و علامة TAP

[[:space:]]

علامات الفراغات

[[:print:]]

كل الاحرف القابله للطباعه

[[:graph:]]

كل الاحرف القابله للطباعه ما عدا المسافات

التكرار:

في بعض المرات , تريد ان تقول ان هناك بعض النصوص تكرر اكثر من مره, يمكنك التعبير هنا بطريقتين في التعابير القياسيه ,, الاولى بإستخدام الحرف * و معناه  ان النمط يمكن تكرار ( صفر او اكثر ) من مره. والطريقه الاخرى هي الحرف + وهذا معناه ان النمط يمكن ان يتكرر ( مره او اكثر )

اجزاء التعابير:

مثال على هذه الطريقه لتوضيحها , (very )*large سوف تقوم بمطابقة التالي: ‘large’ و ‘very large’ و ‘very very large’ وهكذا

عد اجزاء التعابير:

يمكنك تحديد عدد تكرار بعض الاشياء بإستخدام الارقام بين الاقواس {} , يمكنك
تحديد مطابقة تماما بالطريقه التاليه {4} ومعناه 4 مرات تكرار , او مدى تكرار {2 , 4}
ومعناه من مرتان الى اربع مرات او مدى غير منتهي {2, } ومعناه على الاقل مرتان تكرار , فلو عملنا التالي (very ){1,3} فسوف يطابق التالي  ‘very ‘ و ‘very very ‘ و ‘very very very ‘.

بداية ونهاية التعابير القياسيه :

الطريقه التي سأعرضها الان سوف تقوم بتعليمك ان تطابق النص اذا كان في البدايه او النهايه وغيرها , ويمكن ذلك بإستخدام الحرف ^ , ( انتبه , لا تقم بالتعارض مع الطريقه التي بالاعلى ) , هذا الحرف ^ يقوم بالمقارنه في بداية النص والحرف $ يقوم بالمقارنه في نهاية النص. فلو قلنا ^bob فهذا يطابق bob في بداية النص , ولو قلنا com$ فهذا يقارن com في نهاية النص, لو تلاحظ المثال التالي ^[a-z]$ فهذا معناه ان يطابق اي حرف في النص كل على حده

التفريعات :

لو اردنا ان نطابق العبارات com او edu او net فسوف نستخدم الطريقه التاليه (com) | (edu) | (net)

( ملاحظه: لو ادرت ان تطابق احدى علامات التعابير مثل $ او * فيجب ان تضع امامها العلامه  , فلو اردت ان تطابق العلامه  فسوف تقوم بالتالي  )

شاركها

This Post Has One Comment

  1. Lolo11k

    اسستاذ عندي سؤال ضروري وابيك تسساعدني فيه ،
    سؤال اكتب التعبير المنتظم للغه اللي مكوناتها {a,b} وعدد a يقبل القسمه على 3 السؤال الثاني : التعبير المنتظم للغه {a,b} ولا تحتوي على aa
    التعبير المنتظم للغه {a,b} تبدا ب aa ووتحتوي بالضبط على 2d وتنتهي ب cc
    ارجوك اسستاذ في اقرب وقت ممكن جاوب على هالاسئله

اترك تعليقاً