الانتقال إلى المحتوى

Regular Expression


asd202

Recommended Posts

إن كنت لا تعرف الـ Regular expression فتأكد بأنه قد فاتك الكثير، لكن ليس بعد الآن.

بداية الـ Regular Expression كانت مع البيرل ثم تطورت و ظهرت أهميتها و توسعت لتشمل أغلب لغات البرمجة النصية Scripting Languages لأنها تفيد كثيراً في هذا النوع من البرمجة التي تحتاج إلى كود سريع و في نفس الوقت قصير و منه هذه اللغات التي تقدم دعم لها الـ SQL و الـ 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,}


منقول

رابط هذا التعليق
شارك

  • بعد 4 سنة...

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية