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

Alhazmy13منذ 7 سنوات

ماهو الـ Regex؟

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

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

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

Screen Shot 2016-05-22 at 5.16.25 PM.png

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

تستطيع الجمع بين الرموز السابقة لتكوين تعبير نمطي واحد مثل [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 = "[email protected]";
 String re="[a-zA-z].*@.*\\.\\w+";
 boolean isMatch=email.matches(re);
 System.out.println(isMatch); \\Print True

PHP


$re = "/[a-zA-z].*@.*\\.\\w+/";
$str = "[email protected]";
preg_match($re, $str, $matches);

JAVASCRIPT


var re = /[a-zA-z].*@.*\.\w+/;
var str = '[email protected]';
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 الفرق بينها موضح بالجدول

Screen Shot 2016-05-22 at 5.11.43 PM.png

رابط المقالة الاساسية:

http://alhazmy13.net/regex/

كلمات دليلية:
3
إعجاب
12295
مشاهدات
0
مشاركة
1
متابع
متميز
محتوى رهيب

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !