التعابير النمطية Regular Expressions

ماهو الـ Regex؟

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

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

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

الرمزالمعنىالرمز البديلمثال
^أول السطر^a
للتأكد من ان النص يبدأ بحرف a
$أخر السطر$abc
للتأكد من ان النص ينتهي بالأحرف abc
.جميع الاحرف والارقام والرموز
+يوجد مرة واحدة على الاقل او أكثر{1,}a+
للتحقق من ان النص يحتوي على الأقل حرف a واحد
*لايوجد أو يوجد بعدد لانهائي من المرات "صفر أو أكثر"{0,}.*
للبحث عن أي سلسة احرف متتالية
?يوجد مرة واحدة على الاقل او لايوجد تماماً{0,1}?x
للتأكد من ان حرف x غير موجود او على الأقل موجود لمرة واحدة
|أو
a|b التحقق من وجود حرف a أو b
{x}التكرار بعدد مرات x{3}d\
للتأكد من وجود ثلاث ارقام بشكل متسلسل
{x,y}التكرار مابين x و y{1,4}d\
للتأكد من وجود على الأقل رقم واحد او ارقام على الأكثر
\dجميع الأرقام من 0 الى 9
[0-9]
\sمسافة[ \t\n\x0b\r\f]
\Sاي حرف عدا المسافة\^s
\wاي كلمة مكونة من حروف أو ارقام او علامة _
\Wاي شئ عدا الكلمات, جميع الرموز الاخرى

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

تستطيع الجمع بين الرموز السابقة لتكوين تعبير نمطي واحد مثل [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 الفرق بينها موضح بالجدول

الدالةالتوضيح
s.matches("regex")دالة تقوم بالبحث عن الـ regex بداخل النص s ومن ثم تقوم بارجاع true في حالة المطابقة, وغير ذلك false.
s.split("regex")تقوم بإنشاء مصفوفة من نوع String عناصرها جميع s والفاصل بينها هو الشرط regex
s.replaceFirst("regex"), "replacement"تبحث عن اول regex موجود بالنص وتقوم باستبداله بالعبارة replacement
s.replaceAll("regex"), "replacement"تبحث في النص عن جميع مايطابق الـ regex وتقوم بابداله بالعبارة replacement

Share:
5 comments on التعابير النمطية Regular Expressions
oakley sunglasses sale
  • أكتوبر 3 2015
  • رد
Thanks a lot for sharing!
Samaa
  • نوفمبر 22 2015
  • رد
شكرًا مرره عبدالله جد أول مره انتبه لهالتفاصيل
احمد
  • نوفمبر 27 2015
  • رد
جزاك الله خير على هذي المعلومات القيمة موفق انشاء الله .....??
عليّ
  • ديسمبر 30 2015
  • رد
جزاك الله خير .. وكتب أجرك ❤️
Riamm
  • فبراير 24 2016
  • رد
جميل يعطيك العافية

Post a comment

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *