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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

Regular Expression


1 رد (ردود) على هذا الموضوع

#1 asd202

asd202

    عضو نشط

  • الأعضــاء
  • 405 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 26 October 2008 - 05:07 PM

إن كنت لا تعرف الـ 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 معجب بهذا
begin

for i in REVERSE 1..100000

loop

message('اللهم ارحمنا');

end loop;

end;

#2 المتميز1

المتميز1

    مشترك

  • الأعضــاء
  • 74 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 27 February 2013 - 08:02 PM

موضوع ممتاز ومهم
شكرا جزيلا