الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سلسلة تعلم Regular Expressions

مغلق
بدأه Ahmed H. Alawady في 6 أكتوبر 2005 · 0 رد · 827 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1

نقلا عن الأخ الغملاسي : الموضوع

=================================================

السلام عليكم

الدرس السادس : Position Matching تحديد مكان المطابقة

مدة الدرس 6 دقائق

لا جديد عليك معظم الأدوات التي سنتطرق إليها قد مرت عليك سواءً بشكل مباشر أو غير مباشر

بإستثناء الـ Multi Line Mode .

أولاً إستخدام الحدود Using Boundaries

يتفرع منها حدود الكلمة Word Boundaries و حدود النص String Boundaries

حدود الكلمة Word Boundaries و هي تحديد مكان الكلمة بإستخدام الأداة

\b

تم التطرق إليها في الدرس الرابع , ما يهمنا الآن هو نقيض هذه الأداة وهي

\B

وتعني عدم مطابقة حدود الكلمة مثال ذلك

string str1 = "\B-\B"

عند الفحص الكلمة Yes – Yes مطابقة كوننا نبحث عن العلامة - dash لا تحدها كلمة و بالطبع هنا لا تحدها كلمة

سواءً من البداية أو من النهاية كون كِلتا المسافتين في أول و أخر الـ - خولت المطابقة لان المسافة ليست بحد من حدود الكلمة وليست حرف

ينتمى إلى الكلام .

معلومة الأداة

\<

تستخدم لمطابقة بداية الكلمة , لكنها محصورة على برامج دون أخرى وكذلك قليلة الإستخدام

كذلك الأداة

\>

تستخدم لمطابقة نهاية الكلمة , لكن ينطبق عليها ما ينطبق على الأداة \<

حدود النص String Boundaries و تستخدم الأداة ^ لبداية حدود النص أو السطر والأداة $ لنهاية حدود النص أو السطر

وهذا تطرقنا له في الدرس الرابع والمهم الآن هو إستخدامهما في الـ Multi Line Mode

ما هو الـ Multi Line Mode هي الأداة

(?m)

أولاً تستخدم الأداة (?m) مع كل من ^ و $

تعريفها : تقوم الأداة (?m) على إجبار الـ Regex بالتعامل مع الفراغ أو المسافة في النص على أساس أنه نص مستقل بذاته

أو ما يعرف بـ String Separator وبالتحديد حينما يرد داخل النص الـ vbCrLf أي بداية سطر جديد داخل الفقرة

وهذا يعني ببساطة تجزئة النص إلى نصوص مثل Hello There فـ Hell نص و There نص

أخر و هلم جرى . وعلى هذا المنوال اي منوال Multi Line Mode سيكون التطابق في أول النص أو بداية كل مقطع في النص .

و بشكل مفصل : تقوم (?m) على جعل الأداة ^ تأخذ معنىً أخر بحيث تصبح تطابق كل بداية نص أو مقطع في داخل النص

اي تعتبر كل مقطع في النص على اساس أنه نص مستقل بذاته بشرط أن يكون في سطر جديد .

يعني بإختصار شديد البحث عن قيمة معينه بشكل متكرر في كل بداية الفقرة أو النص .

نقيض هذه الأداة هي (?s) وتعني Single Line Mode .

وللعلم الـ Enumerations الموجودة في الـ VB.NET مقدمة على التركيبة النصية في الـ Pattern

مثلاً لو كتبنا صيغة بهذا الشكل

"(?m)^'.+$"

ثم إستخدامنا الـ Enumeration التالي RegexOptions.Singleline فإن خاصية SingleLine تطغى على الصغية

فيعتبر معنى الـ ^ على أساس أنه يبحث فقط عن بداية السطر Line وليس للمعنى الذي سبق ذِكره , وهو تكرار البحث في داخل النص .

يتم إستخدام الـ Multi Line Mode في VB.NET بإحدى الـ Enumerations

الخاصة بـ RegexOptions شاهد المثال التالي

Regex rx = new Regex(str3, RegexOptions.Multiline);

كذلك الأداة A\ تنوب عن ^ و الأداة Z\ تنوب عن $

ولكن لإستخدام الـ Multi Line Mode لا تستخدم الأدوات

\A or \Z

و إستخدم كل من

^ and $

سؤال اهذا الدرس كالتالي

ما هي الأخطاء المرتكبة في هذه التركيبة النصية

const string str3 = "\\A'.+\\Z"; 

private void Button3_Click(object sender, System.EventArgs e) 
{ 
 Match m; 
 Regex rx = new Regex(str3, RegexOptions.Singleline); 
 int Counter; 
 m = rx.Match(txt2.Text); 
 while (m.Success) { 
   Counter += 1; 
   m = m.NextMatch; 
 } 
 MessageBox.Show(" There are " + Counter + " Comments in this String "); 
}

هذا والله أعلم

الملف المرفق

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

هذا الموضوع مغلق.

مواضيع مشابهة