بتاريخ: 26 أكتوبر 200817 سنة comment_141565 إن كنت لا تعرف الـ 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,} منقول تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.