إن كنت لا تعرف الـ Regular expression فتأكد بأنه قد فاتك الكثير، لكن ليس بعد الآن.
بداية الـ Regular Expression كانت مع البيرل ثم تطورت و ظهرت أهميتها و توسعت لتشمل أغلب لغات البرمجة النصية Scripting Languages لأنها تفيد كثيراً في هذا النوع من البرمجة التي تحتاج إلى كود سريع و في نفس الوقت قصير و منه هذه اللغات التي تقدم دعم لها الـ PHP و الـ Jscript و Javascript و VBScript و ASP و حتى استعلامات الـ SQL تقدم دعم لها.
قدمت Microsoft مكتبة دعم للـ Regular Expression حتى تستطيع استخدامها بالـ Vbscript و الـ JScript أو بأي لغة أخرى.
أنصح بالأطلاع على Microsoft Windows Script Technologies http://msdn.microsoft.com/scripting .
استخدام الـ Regular Expressions سيزيل عنك الكثير و الكثير من العناء و يجعل الكثير من الأمور التي تبدو معقدة أيسر و أسهل فمثلاً لو أردت عمل برنامج لاستخراج النصوص العربية من أي ملف فسيتطلب ذلك كود طويل و مليء بالأخطاء لكن و بعدة أسطر سهلة يمكنك إنجاز نفس العمل و بالسرعة و الأداء المطلوب.
لننتقل إلى الجانب العملي.
افتح الـ References من Project و أضف الـ Microsoft VBScript Regular Expression 5.5
ملاحظة:بعد إضافة المكتبة للـ References افتح الـ Object Browser من قائمة View أو اضغط F2 ستتمكن عندها من استعراض أغراض و خصائص العنصر RegExp.
أصبحت الآن جاهز لاستخدام هذه الـ Class الخارجية .
Dim myRegExp As RegExp
Dim data As String, itm, res
data = Text1.Text
'ننشء نسخة جديدة من هذا العنصر لنتعامل معها
Set myRegExp = New RegExp
'لتجاهل حالة الأحرف كبيرة أو صغيرة
myRegExp.ignorecase = True 'خاصية تجاهل حالة الأحرف أم لا
myRegExp.Global = True 'ضروري إن كنا نريد استخراج كل النتائج
myRegExp.MultiLine = True 'إن كنا نريد استخدام نصوص متعددة الأسطر
'تحديد نموذج العمل
myRegExp.Pattern = "test" 'خاصية تحديد نموذج البحث
'تنفيذ العملية (استخراج أو استبدال)
Set res = myRegExp.execute(data) 'عملية بحث فستعيد كولكشن بنتائج البحث
'res = myRegExp.Replace(Data, replace_str) 'عملية استبدال فستعيد عدد مرات الاستبدال
'نأخذ الخرج و نتعامل معه....
For Each itm In res
List1.AddItem itm.Value & " | " & itm.FirstIndex & " | " & itm.Length
Nextبالنسبة للنموذج فبإمكانك استخدام الصيغ القياسية للـ Regular Expressions وهذا شرح مبسط لها:
لو كتبنا بالنموذج أي تسلسل أحرف مثل arabteam و عملنا عملية استبدال فسيقوم باستبدال كل تواجد ل arabteam بالنص.
و هي محرف الهروب escape character أي إذا أردت إدراج محرف محجوز مثل الـ $ أو * أو . أو غيرها فضع الـ قبلها ليتعامل معها كمحرف.
؟ و * و + تدل على أن المحرف أو المجال الذي يسبقها من الممكن تكراره فالـ * تدل على تكرار من 0 حتى عدد غير محدود مثل:
arabteam20*
هنا تتحقق عند arabteam2 و arabteam20 و arabteam200 و arabteam2000 و arabteam20000 و ....
و لو استخدمنا الـ + لدلت على تكرار 1 أو أكثر، مثال:
arabteam20+
هنا يتحقق عند arabteam20 و arabteam200 و .....
بينما تدل الـ ؟ على وجود أو عدم وجود أي إما أن يوجد مرة واحدة أو لا يوجد مثل:
arabteam20?
هنا يتحقق عند الـ arabteam20 و الـ arabteam2 فقط.
طيب إذا أردنا أن نحدد نحن عدد المرات التي من الممكن أن يتكرر المحرف بأن نحدد أقل و أعلى حد مسموح عندها نستخدم{Min,Max} فمثلاً.
arabteam20{0,3}
هنا يتحقق الكود عند تكراره من 0 مرة إلى 3 مرات
arabteam2 و arabteam20 و arabteam200 و arabteam2000
المجالات:
تدل النقطة . على أي حرف فمثلاً:
arabte.m هنا تتحقق عند arabteam و arabtebm و arabteacm و arabtedm و ....
و إذا كنا تحديد المجال المسموح به من المحارف نضعها بين قوسين كبيرين كالتالي و داخله بداية المجال-نهاية المجال:
arabte[a-c]m
المجال يدل على الأحرف المحصورة بين الـa و الـ C أي abc و منه فيتحقق المجال هذا عند: arabteam و arabtebm و arabteacm فقط
و إن لم نضع الـ - في المجال فستدل على تواجد هذا الحرف أو مجموعة الأحرف الموجودة داخل القوسين مثل:
arab[team]2000
يتحقق عند arabteam2000
مثال آخر:
arab[team]?2000
يتحقق عند arabteam2000 و arab2000
الـ | : تدل على (أو) مثلاً:
arab[team|team2000]
تتحقق عند arabteam و arabteam2000.
الـ ^: تدل أشارة ^ على الأستثناء إن وجدت داخل المجال و سنرى وظيفة أخرى لها إن لم توجد داخل المجال، مثال:
arab[^t]eam
هنا تتحقق عند arablead,arabcead .... ما عدا arabteam.
وجود الـ ^ إن لم تكن داخل قوسين كبار يدل على أن الجملة يجب أن تبدأ بكذا و الـ $ تعني أن الجملة يجب أن تنتهي بكذا .مثال:
^arab[.]*
تتحقق على أي جملة تبدأ .....
أمثلة عملية أتمنى أن تفكرو فيها و تفهموها و السؤال إن وجد أي استفسار.
لاستخراج أو البحث عن أرتباطات في نص:
(http://|www.)[a-z0-9/-._?%+;&=]+
لاستخراج الأيميلات من نص أو التحقق من صحة أيميل:
[a-z0-9_-.]+@[a-z0-9_-.]{1,}.[a-z0-9]{2,4}
لاستخراج الأرتباطات من الـ HTML :
لاستخراج نصوص عربية:
[ءrnsأ-ي]{3,}
أتمنى أن تكونو قد استفدتم.
مصادر:
Microsoft Windows Script Technologies:
http://msdn.microsoft.com/scripting
http://msdn.microsoft.com/library/default....egexpsyntax.asp
PHP: