asd202 بتاريخ: 26 أكتوبر 2008 تقديم بلاغ مشاركة بتاريخ: 26 أكتوبر 2008 إن كنت لا تعرف الـ 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,} منقول 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
المتميز1 بتاريخ: 27 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 27 فبراير 2013 موضوع ممتاز ومهمشكرا جزيلا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.