نقلا عن الأخ الغملاسي : الموضوع
======================================================
السلام عليكم
الدرس العاشر : Conditions الشرطية
مدة الدرس 3 دقائق فقط .
يتلخص الـ Conditions في أداتين لجعل جزء من الصيغة يكون تحت وضع إختبار شرطي .
الأداة الأولى هي علامة الإستفهام ؟ وهي تعرف بـ Optional Tool أداةٌ إختيارية
يتم بمُوُجِبها قُبُول جزء من الصيغة أو تجاهله .
أولاً لنفترض أن لدينا نص بهذا الشكل
What is your Favorite Colour or Color ?
ونحن نريد أنتحقق من الكلمة سواءً كانت Color أم Colour سيكون بهذه الصيغة , وذلك بوضع علامة
الإستفهام ؟ بعد الحرف u ليكن حرف إختياري , ممكن تجاهله .
const string str1 = "Colou?r";
التحليل في الأصل أن الصيغة تبحث عن الكلمة Colour وحرف الـ u حرف إختياري و ليس إلزامي
والسبب وضع الأداة ؟ بعده مما يجعل Regex يتجاهلهُ إذا عثر على نفس الكلمة تماماً ولم يعثر على الحرف u .
وهذا يعني أن الكلمة Color مطابقة لآنها نفس الكلمة تماماً , ما عدى الحرف (الإختياري) وهو u .
آلية Regex كالتالي لنفترض أنه وجد الكلمة Color سيبحث عن حرف C مطابق
ثم الحرف o مطابق ثم الحرف l مطابق ثم الحرف o مطابق ثم الحرف u ليس مطابق ولانه إختياري سيكمل البحث عن الحرف r مطابق
سيعود بالكلمة color كونها مطابقة تماماً وكأن حرف الـ u لم يكن مدرج ضمن الصيغة .
الأداة الثانية وهي | وتعرف بـ Or Condition أما هذا أو ذلك .
لِنُعاود البحث عن الكلمة Color أو Colour بهذا الشكل .
const string str2 = "Color|Colour";
التحليل
في هذه الحالة نحن في الأصل نبحث عن الكلمة Color إن وُجِدت أولاً تم التطابق فإن لم توجد سنبحث عن الكلمة Colour
الكلمة التي تأتي من اليسار هي الكلمة المراد البحث عنها أصلاً في مثالنا هذا هي الكلمة Color .
إلا إذا عينت البحث من اليمين إلى الشمال , وذلك عن طريق الـ RegexOptions Enumerations
بهذا الشكل
RegexOptions.RightToLeft
آلية Regex كالتالي لنفترض أنه وجد الكلمة Colour سيبحث عن حرف C مطابق
ثم الحرف o مطابق ثم الحرف l مطابق ثم الحرف o مطابق ثم الحرف u ليس مطابق سيفشل التطابق حتى ولو كانت الكلمة
الأولى هي Color ثم سيذهب للخانة الثانية من الشرط وهي الكلمة Colour ويبدأ بالتحقق منها حرف حرف حتى
يصل الى أخرها سيجدها مطابقة , سيعود بالكلمة Colour كونها مطابقة للنصف الثاني من الشرط Or .
أسئلة الدرس العاشر صح أم خطأ مع تصويب الخطأ إن وجِد .
السؤال الأول للبحث عن الكلمة hide أو ride أو side يكون بهذه الصيغة
const string str1 = "(r|h)ide";
السؤال الثاني للبحث عن الكلمة my و by يكون بهذا الشكل
(my\|by)
السؤال الثالث هذه الصيغة غير صحيحة ولا تعطي نتيجة متوقعة وهي أما Color أو Colour ؟
(Color)|Colour
السؤال الرابع هذه الصيغة أصلاً تبحث عن الكلمة Colour أولاً فإن لم توجد فستبحث عن الكلمة Color ؟
const string str2 = "(Color|Colour)"; private object rx = new Regex(str2, RegexOptions.RightToLeft);
السؤال الخامس تعرف الأداة | و الأداة ! بـ Conditions Tools ؟
السؤال السادس الرمز : إختياري في هذه الصيغة
(my name is :)?
هذا والله أعلم .