/Regular Expression ( RegEx )

Regular Expression ( RegEx )

Regular Expression

“Regular Expression ” او “Regex ” او “Regexp ” و هى ما تسمى بالــ ” التعابير النمطية ” او ” التعابير القياسية” كما يطلق عليها البعض .

و ببساطه هى عبارة عن طريقة تسمح لنا بالبحث داخل النصوص بإستخدام patterns معينه .


كانت بداية ظهورها فى نظام التشغيل ينــكس ، ثــم أصبحت مدعومة من قبل كثيراً من لغات البرمجة مثل : ( python -perl – php – java –  و أيضاً يمكن استخدامها فى Unix Shell غيرهم…..  ) بحيث تعتمد على صيغ نصية تحتوى على بعض الحروف الخاصة التى تمتلك معنى خاص .


و الجدير بالذكر أن بعض محررات النصوص تسمح بإستخدام ال Regex فى البحث عن النصوص بداخلها .


فأبسط مثال على إستخدام الــ “Regular Expression” هو البحث عن إيميلات فى ملف نصى او البحث عن عناوين المواقع او حتى البحث عن أرقام تليفونات فهنا يأتى دورها كحل أمثل .


و فى هذه المقاله سوف نطرح بعض أساسيات الـ Regex التى سوف تساعدنا فى فهم مبادئ المعايير القياسية للغات البرمجه المختلفة .

1- “ . ” تعني أي رمز

2- “^ ” وتعني بداية الخط

3- “$ ” هي نهاية الخط

4- “| ” وهي تعني ( أو ) وتستعمل للاختيار بين شيئين

5- “ ( ) ” وهي للتعبير عن المجموعة

6- “[ ] ” الاقواس الكلاسيكية

7- “ \ ” وتضاف أمام العلامة للتعامل معها على أنها رمزا

8- ” * ” لتكرار الرمز قبلها من صفر الى مالا نهاية

9- ” + ” لتكرار الرمز مرة واحدة الى مالانهاية

10- ” ؟ ” وتستخدم لتكرار الرمز مرة أو ولا مرة

11- “{N}” لتكرار الرمز الذي قبلها بقيمة العدد الموجود داخله

12- “{m ,}” لتكرار الرمز بعدد مرات من 0 إلى  m

13-“{,n } ” لتكرار الرمز عدد مرات n إلى مالانهايه

14- “{n.m }” لتكرار الرمز بقيمة محصورة بين N الى M


و لكن لن  يكتمل المفهوم إلا بطرح بعض الأمثلة :-


ملحوظه :-  سيكون الـRegex المطلوب باللون الأزرق – و الــجمله المراد البحث فيها باللون الأحمر

للبحث عن كلمة داخل نص معين ..

cat

catreloaded


للبحث عن الكلمه فى بداية النص بنستخدم الرمز ” ^ ” او للبحث عن الكلمة فى نهاية النص نستخدم ” $ ” كما فى المثالين التاليين


catreloaded^

catreloaded group

————————————

$ group

catreloaded group

 

Escaping

بعض العلامات بيكون ليها استخدام خاص مثل (* و . ) فبيكون من الأفضل إستخدام علامة الـ escape هذه  “\ ” إذا أردنا البحث عنهم فمثلا نريد البحث عن .net


net./

catreloaded.net


النقطه ( الدوت )

تستخدم عندما نبحث عن نص به رمز غير محدد ، فمثلا إذا أردنا البحث عن كلمة أولها c و آخرها t فتكون

c.t

و الكلمات المتاحه ستكون

cat او cbt  او cct او cdt

و هكذا حتى حرف z ، و يمكن ان تكون ( الدوت ) فى أول الكلمه او فى آخرها او فى أكتر من كلمه ، أتمنى تكون واضحه .


التكرار

إذا أردنا أن نقول للـ regex أنه من الممكن هذا النص تتكرر و لكن بعدد معين او إلى مالا نهاية ..

فيتيح لنا regex عدة رموز للتحكم فى التكرار


لتكرار النص فى الـ Regex من 0  مره ( أى لا يوجد ) إلى ما لا نهاية نستخدم  هذا الرمز ” * ” (Kleene star) 

مثال :-

ca*t

caaaaaaaaaaaaaat و يمكن ان تكون ct


لتكرار النص فى الـ Regex من 1 مره إلى مالا نهاية نستخدم هذا الرمز ” + “


لتكرار النص فى الــ Regex و لكن بشكل محدد أكثر (بتحديد عدد مرات التكرار) تكون بالشكل التالى

{3}(cat)

catcatcatreloaded

لتكرار النص فى الــ Regex و لكن بشكل محدد أكثر ( بتحديد أكبر عدد تكرارات و أقل عدد تكرارات ) تكون بالشكل التالى

{3,5}(cat) معناها اكبر عدد تكرارات 5 و أقل عدد تكرارات 3


و أيضاً يمكن أن تكون {,2}(cat) و هذا يعنى أن عدد التكرارات من 2 مره إلى مالا نهايه .. و العكس صحيح إذا كانت {3,}(cat) أى أنه من عدد تكرارات 0 ( اى غير موجود ) إلى 3 مرات .

أتمنى ان يكون المعنى واضح .

search patterns

تحتوى على الأقواس [  ] للبحث عن شكل لنص معين .. كما فى الأمثلة التالية

إذا اردنا البحث عن حرف متوقع وجودها فى النص ، تكون كالتالى

[abcd]

بدون فواصل و تعنى a او b او c او d

cat

و لكن إذا اردت البحث عن الكلمات يكون بإستخدام OR operator بهذا الشكل

CAT|radio|catazine

It’s CAT revolution

إذا اردنا البحث عن مجال معين للحروف small letters يكون كالتالى [a-z] او [c-j] فبحريتك تضع مجال الحروف الذى تريده

إذا اردنا البحث عن مجال الحروف و لكن capital letters  يكون كالتالى [A-Z] او [C-K] .

و يمكن الجمع بين البحث عن الحروف الـ small و الـ capital من خلال هذا الـregex

[a-zA-Z] فبدون وضع اى فواصل سيفهم بإنه يقول إذا كانت الحروف capital او small .

و كما ذكرنا فى السابق أنه يمكن وضع ” ^ ” إذا أردنا ان يكون الحرف او النص فى البداية كالتالى [a-z]^ ، او نضع ” $ ” إذا اردنا النص او الحرف فى النهاية يكون كالتالى $[a-z] .

و بالمثل فى الأرقام فإذا اردنا وضع إحتمالية وجود مجال معين من الارقام يكون [1-6] و إذا أردنا ان يكون كل الأرقام [0-9] .

Complement Operator

إذا أردنا البحث عن ما هو غير موجود بـالـ Regex

سيكون كالتالى [a-z^] لاحظ الفرق بين وجود العلامه “^” بداخل الاقواس وخارجها

فهى فى هذه الحالة تعنى كل ما هو غير a-z  أى يمكن ان يكون حروف capital و يمكن ان تكون أرقام و يمكن ان تكون رموز خاصه و لكنها لن تكون حروف small

فالعلامة ” ^ ” إذا وضعت بين القوسين فإن معناها  “ليس” “not “ — و ليس معناها بأنها فى أول الكلام — وضحت الفكرة ؟

Grouping ” ( ) “

و يتم وضع الأشياء مع بعضها للمحافظه على النظام و تسيل قراءة الـ regex خصوصا إذا كان معقد

أمثلة توضيحية 

1. للتأكد من إسم المستخدم ( بحيث لا يزيد عن 10 حروف و يلا يقل عن 4 حروف – يمكن استخدام _ او .  — يمكن ان يحتوى على ارقام )

^([a-zA-Z0-9_.]{4,10})$

و تم وضع $ و ^ و ذلك لأنها كلمه واحده فقط و ليس نص كبير سيبحث فيه .

2.للتأكد من الإيميل ( فهو يبدأ بحروف او _أو . أو ارقام او خليط منهم – ثم يأتى بعد ذلك علامة @ – ثم إسم الموقع أرقام او حروف او مزيج بينهم – ثم الدوت  ” .” ثم أخر جزء و هو com او غيره و يفضل تحديدها بـأربعة حروف ) .

^([a-zA-Z0-9_.)+@([a-zA-Z0-9.-])+\.([a-zA-Z]{2,5})$

example_12@gmail.com

لاحظ معى أن علامة + أنه يمكن تكرار ما قبلها مره او أكثر – و أيضا لاحظ وجود \. كما ذكرنا فى السابق بأن لها معنى أخر فى الـ Regex .

و بهذا القدر نكون قد تعرفنا على الكثير من مفاهيم و أساسيات الـ regular expression و لكن لا تكتفى بهذا المقال و لكن قم بالبحث عن مقالات و كتب أخرى -فهذا المقال قليل جدا من كثير جدا – و إن أصبت فمن الله و إن أخطأت فمنى و من الشيطان