ماهو الـ Regex؟

اختصاراً لـRegular Expressions ومعناها الحرفي هو التعابير النمطية, تعتمد علــى مـا يسـمـى بالـ Pattern ويمكن الاطلاق عليها بـ regex or regexp. وهي طريقة تستخدم في وصف النصوص للبحث والمطابقة داخل النص او الجمل لعمل مقارنة عليها ومن ثم استخراجها او التحقق من صحتها, على سبيل المثال اذا اردت حذف جميع المسافات الموجودة في احد الملفات تستطيع عملها عن طريق البحث يدوياً في الملف وحذف جميع المسافات التي تجدها, او ان تقوم ببناء سكربت يحتوي على عدد ضخم من الشروط If والتكرارات Loop والتأكد من كل حرف عن ما اذا كان مسافة او لا, اما الحل الاخير فهو باستخدام الـ Regex فبإمكانك بعبارة واحدة بيسيطة لاتتجاوز السطر الواحد ان تقوم بجميع ماسبق, فإستخدامك للتعبيرات النمطية يختصر عليك وقتاً وجهداً هائلاً خاصة في التعامل مع النصوص الضخمة, تستطيع استخدام هذه التقنية مع العديد من اللغات مثل Java, PHP, Python, C, JavaScript وغيرها.

الرموز الاساسية

تقنية الـ Regex تتكون من عدة رموز يمكنك استخدامها لتنفيذ التعبير الخاص بك.

[table id=2 /]

طريقة الاستخدام

تستطيع الجمع بين الرموز السابقة لتكوين تعبير نمطي واحد مثل [a-zA-Z]\s[0-9], او ان تقوم بفصلها عن طريق المجموعات باستخدام الاقواس ([a-zA-Z])(\s)([0-9]) كما ان كل مجموعة من المجموعات السابقة تستطيع استدعائها عن طريق الرمز $ فمثلا لو أردت استخدام المجموعة الاولى والثالثة فقط, تستدعيها عن طريق $1$3 وهكذا.

مثال 1:

من الامثلة التي قد تصادفك في اي مشروع هو التأكد من صحة البريد الالكتروتني, يجب عليك التأكد من ان البريد الالكتروني  يبدأ بمجموعة أحرف ثم علامة @ واخيرا ينتهي باحد المسارات .net, .com , تستطيع تطبيق هذا المثال عن الـ Regex كما في الامثلة بالاسفل.

Regex Pattern

[a-zA-z].@..\w+

Java

String email = "myEmail@Domain.com"; String re="[a-zA-z].@.\.\w+"; boolean isMatch=email.matches(re); System.out.println(isMatch); \Print True

PHP

$re = "/[a-zA-z].@.\.\w+/"; $str = "myEmail@Domain.com"; preg_match($re, $str, $matches);

JAVASCRIPT

var re = /[a-zA-z].@..\w+/; var str = 'myEmail@Domain.com'; var m; if ((m = re.exec(str)) !== null) { if (m.index === re.lastIndex) { re.lastIndex++; } // View your result using the m-variable. // eg m[0] etc. }

مثال2:

اذا اردت التحقق من عنوان IP, فكما هو معروف بإن عنوان الـ IP يحتوي على اربع مجموعات وكل مجموعة تحتوي على الاكثر ثلاث ارقام ويفصل بين كل مجموعة علامة . مثل; 192.168.1.34

Regex Pattern

\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}

Java

String email = "192.168.1.12"; String re="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"; boolean isMatch=email.matches(re); System.out.println(isMatch); \Print True

PHP

$re = "/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/"; $str = "192.168.1.12"; preg_match($re, $str, $matches);

JAVASCRIPT

var re = /\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}/; var str = '192.168.1.12'; var m; if ((m = re.exec(str)) !== null) { if (m.index === re.lastIndex) { re.lastIndex++; } // View your result using the m-variable. // eg m[0] etc. }

دوال الجافا

يوجد بعض الدوال الموجود في كلاس String للتعامل مع الـ Regex الفرق بينها موضح بالجدول

[table id=3 /]