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

سلسلة تعلم Regular Expressions

مغلق
بدأه الشهاب الحارق في 20 مارس 2005 · 3 رد · 1,621 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

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

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

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

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

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

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

\b

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

\B

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

Const str1 As String = "\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 شاهد المثال التالي

   Dim rx As New Regex(str3, RegexOptions.Multiline)

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

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

\A or \Z

و إستخدم كل من

^ and $

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

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

  Const str3 As String = "\A'.+\Z"
 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim m As Match
           Dim rx As New Regex(str3, RegexOptions.Singleline)
        Dim Counter As Integer
        m = rx.Match(txt2.Text)
        Do While m.Success
            Counter += 1
            m = m.NextMatch
        Loop
        MessageBox.Show(" There are " & Counter & " Comments in this String ")
    End Sub

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

PositionMatching.zip

1

في المثال يتضح المقال

#2

آها ..

جزاك الله خير ياأستاذنا

جاري الحفظ .. :lol:

تم تعديل هذه المشاركة بواسطة seahmad في 20 مارس 2005 في 21:13

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

#3

بالنسبة لجواب السؤال فهو كالتالي:

يوجد خطأين:

RegexOptions.Singleline

يجب أن تكون::

RegexOptions.Multiline

و كذلك:

Const str3 As String = "\A'.+\Z"

يجب أن تكون::

Const str3 As String = "^'.+$"

لكن عندي سؤال::

هل يجب أن يوضع (؟m) في بداية الصيغة دائماً .؟؟ و ماذا يحدث لو وضعتها في الاخر او المنتصف..

لقد حاولت وضعها و فعلاً تغيرت النتائج لكني لم افهم الكيفية التي تعمل بها..

اقتباس
الـ VB هى الأساس ... بتبرمج بيها بالاحساس

ولا سيمي كولن ولا أقواس ... وتعلمها سهل لكل الناس

راكب فيها موتور نفاث ... دي سريعه جدا وباخلاص

الـ VB هى التراث ... للذكور والايناث :D

الـ VB لغة عريقه ... حتى اسأل Anwarica

من ديوان الشاعر السي شاربي "معتز شمس"
#4

السلام عليكم

أجبت بارك الله فيك بشكل صحيح لكن بشكل مختلف .

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

السبب أنه لا يبحث عن تكرار التطابق ويدل على ذلك إستخدام الSingle Mode وكذلك إستخدام كل من \A و \Z

يدل على ذلك ... اليس كذلك ؟

بالنسبةِ لِسؤالك وضع الأداة

(?m)

في غير مكانها لا يعطيها معنىً أخر, بل تصبح مجهوله لأنها أداة إستخدمت في غير مكانها , اي تكون Ignored Tool

فهي كما تعلم و كذلك Regex يعلم أنها أداة لتحويل الـ ^ إلى معنىً أخر وهو المذكور في الأعلى.

لكن المهم أنها لن تؤدي وظيفتها إن لم تكن في مكانها الصحيح وهو أول الصيغة

والله أعلم

في المثال يتضح المقال

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

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