السلام عليكم
الدرس التاسع : Look around البحث حولك .
مدة الدرس 3 دقائق
تنقسم تقنية البحث من حولك Look around إلى قسمين هما
1- البحث من الأمام Look Ahead
2- البحث من الخلف Look Behind
وهي بشكل مختصر أن نبحث عن مطابقة قيم معينه إبتداءً من (حرف , رمز , رقم) اينً كان
وشرطها ان الحرف أو الرمز الذي نعينه كقيمة للبحث لا يشمل التطابق ,
و إنما هو فقط ( اي الحرف أو الرمز ) القيمة التي سيتوقف عندها التطابق
أو يبدأ منها (ولكن لا يشملها).
القسم الأول Look Ahead البحث من الأمام , نستخدم في ذلك الأداة التالية
(?=)
هذه الأداة تقوم بالبحث عن القيم قبل القيمة التي نعينها بعد العلامة يساوي .
لو إفترضنا أن لدينا قيمة نصية بهذا الشكل
txt2.Text = "http://uaemag.cc"
فلإستخلاص الـ http من القيمة النصية يتحتم علينا إستخدام الأداة Look Ahead
بهذا الشكل
Const str1 As String = ".+(?=:)"
الناتج سيكون http
التحليل :
أولاً كشرط لابد أن تكون الأداة داخل القوسين
ثانياً بعد علامة يساوي نضع مدى التطابق Length أو القيمة الأخيرة للتطابق
لكن ليست شامله مع القيم المطابقة , في مثالنا هذا القيمة : ليست من ضمن التطابق
و إنما هي أخر قيمة ستتوقف عندها المطابقة لكن لا تشملها معهم .
القسم الثاني وهي الأداة Look Behind البحث من خلفك
(?<=)
ينطبق عليها نفس القانون الأول إلا انها تبحث بعد القيمة التي وُضِعت بعد العلامة يساوي
مثال ذلك أننا نريد القيمة بعد http سيكون بهذا الشكل وفقاً للمثال الأول
Const str2 As String = "(?<=:).+"
تلاحظ أنني إستبدلت مكانها وفقاً للمثال السابق
هنا نطلب من الصيغة البحث عن القيمة بعد العلامة : سيكون الناتج
//uaemag.cc
الأداتين السابقتين تعرفا بـ Positive Look Around
بقي علينا معرفة Negative Look Around
أداتين قليلتا الإستخدام ويفضل إستخدام كل من الـ Word Boundary أ و String Boundary معهما .
وتتكون كذلك من أداتين هما
1 – Negative Look Ahead
2 – Negative Look Behind
وهما نفس التركيبة تماماً مع إستبدال العلامة يساوي = إلى علامة التعجب !
إلا أن بعض القوانين السابقة لا تنطبق عليهما .
بهذا الشكل
(?!) Negative Look Ahead (?<!) Negative Look Behind
و الأمثله عنهما في الملف المرفق .
أسئلة الدرس التاسع
إختر الإجابة الصحيحة
السؤال الأول ما هي الصيغة المناسبة لأختيار الحرف N من كلمة Nice ؟
1. (?<=N)\w+ 2. (?<=i).+ 3. \w+(?=i)
السؤال الثاني ما هي الصيغة المناسبة لأختيارالقيمة بعد العلامة @ في النص myEmail@hotmail.com
1. \w+(?=@) 2. (?<=@).+ 3. (?!@)\w+
السؤال الثالث ما هي الصيغة المناسبة لأختيار الرقم 9 من الأرقام 2344359
1. (?=9)\d 2. \d(?=9) 3. \d(?!=9)
السؤال الرابع إستخرج من وثيقة XML الأسماء التالية Ali Nassir Saif Saeed
txt2.Text = "<a1>Ali</a1>" & vbCrLf & _ "<a2>Nassir</a2>" & vbCrLf & _ "<a3>Saif</a3>" & vbCrLf & _ "<a4>Saeed</a4>"
السؤال الخامس لديك أرقام بهذا الشكل
txt2.Text = "32312" & vbCrLf & _ "232-3223" & vbCrLf & _ "21123-" & vbCrLf & _ "222112-4323"
المطلوب مطابقة كل من الأرقام أو الأرقام مع علامة الـ Dash – بشرط أن يكون بعد علامة الـ Dash –
أرقام أو لا تطابقها مثلاً الرقم 34233 مطابق و الرقم 3232-11 مطابق لكن الرقم 11- ليس مطابق
السبب أن علامة الـ Dash – ليس بعدها أرقام .
السؤال السادس صح أم خطأ لتعين النقطة . بعد علامة يساوي في الأداة Look Around يتوجب علينا أن نعمل لها Escaping ؟
والله أعلم