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 و لكن لا تكتفى بهذا المقال و لكن قم بالبحث عن مقالات و كتب أخرى -فهذا المقال قليل جدا من كثير جدا – و إن أصبت فمن الله و إن أخطأت فمنى و من الشيطان
Nice ya Nouran .. keep it up 😉