Regular Expression 1


كتابة الأخ :MrBassam

بسم الله الرحمن الرحيم
السلام عليكم

Regular Expression

ما هو الـ Regular Expression:
هو تقنيه قياسيه للبحث خلال النصوص مدعومه من قبل كثيراً من لغات البرمجه تعتمد على صيغ نصيه تحتوى بعض الحروف الخاصه التى تمتلك معنى خاص.
تخل انك تريد البحث عن الايميلات فى ملف نصى او البحث عن عنواين المواقع او حتى البحث
عن ارقام تليفونات هنا ياتى دور الـ Regular Expression كحل امثل.
دعم الـ Dot Net للـ Regular Expression :
ككثيراً من لغات البرمجه يدعم الدوت نت الـ Regular Expression من خلال مجموعه من الفئات
توجد فى مجال الاسماء System.Text.RegularExpressions

الكائن Regex يستخدم لعمل البحث خلال نص عن صيغه معينه
التصريح عن الكائن بالشكل التالى

رمز برمجي:
' Declare object variable of Regex.  
  Dim r As Regex 
    ' Create a Regex object and define its regular expression.
    r = New Regex("abc")

وبعد ذلك ياتى دور الـ Match الذى يحتوى على النتائج العائده من عملية البحث
من الجيد اختبار الخاصيه Match.Success قبل محاولة قراءة النتائج.

رمز برمجي:
' cCreate a new Regex object.
    Dim r As New Regex("abc") 
    ' Find a single match in the input string.
    Dim m As Match = r.Match("123abc456") 
    If m.Success Then
        ' Print out the character position where a match was found. 
        ' (Character position 3 in this case.)
        Console.WriteLine("Found match at position " & m.Index.ToString())
    End If

فى الحالة السابقه سيمثل الـ Match اول مجموعة حروف تقابله تساوى الصيغه المراد البحث عنها
– يعنى اول نتيجة بحث – اما اذا اردنا جلب كل نتائج البحث نستخدم MatchCollection العائده من Regex.Matches

رمز برمجي:
    Dim mc As MatchCollection
    Dim results(20) As String
    Dim matchposition(20) As Integer

    ' Create a new Regex object and define the regular expression.
    Dim r As New Regex("abc")
    ' Use the Matches method to find all matches in the input string.
    mc = r.Matches("123abc4abcd")
    ' Loop through the match collection to retrieve all 
    ' matches and positions.
    Dim i As Integer
    For i = 0 To mc.Count - 1
        ' Add the match string to the string array.
        results(i) = mc(i).Value
        ' Record the character position where the match was found.
        matchposition(i) = mc(i).Index
    Next i

اعتقد ان هذا كافى لنبداء مع كيفية كتابة الصيغ لـ Regular Expression
يمكنك الحصول على المذيد من المعلومات من خلال الرابط التالى
http://msdn.microsoft.com/en-us/libr…66(VS.71).aspx
__________________________________________________ ___________________________
كيفية كتابة الصيغ لـ Regular Expression :
لقد قمت بعمل مثال صغير لتطبيق ما يلى من صيغ المثال عباره عن TextBox لادخال الصيغه المراد البحث عنها TextBox اخر لكتابة النص المراد البحث خلاله و Button لبداء اجراء البحث و ListBox لعرض النتائج يمكنك تحميل المثال من هنا

وهذا الكود الذى بالمثال

رمز برمجي:
Imports System.Text.RegularExpressions
Public Class Form1
    Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click
        Dim M As MatchCollection
        M = Regex.Matches(T.Text, txtSearch.Text)
        L.Items.Clear()
        For Each MM As Match In M
            L.Items.Add(MM.Value)
        Next
    End Sub
    Private Sub txtSearch_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtSearch.KeyUp
        If e.KeyData = Keys.Enter Then Me.btnGo.PerformClick()
    End Sub
End Class

حيث L هو ListBox لعرض النتائج و T صندوق TextBox لادخال النص المراد البحث خلاله و btnGo مفتاح بداء البحث
نبداء الان فى دراسة كيفية كتابة الصيغ
صيغة النص الساكن :
اذا اردت البحث عن كلمه او جمله او مجموعة رموز يمكنك ببساطه كتابتها كصيغه وهذه الابسط
مثال:
بعد تشغيل البرنامج المثال السالف الذكر
ادخل النص التالى

اقتباس:
I Can write In visual Basic, visual c++ and visual foxpro

واكتب فى خانه الصيغه visual واضغط على مفتاح البحث او اضغط مفتاح Enter
سوف تجد ثلاث كلمات هى نتائج البحث عن الصيغه “visual”
البحث عن اى حرف:
نستخدم النقطه “.” لتحل محل اى حرف او رمز مثال ذلك
اكتب فى النص المراد البحث خلاله
I Have visual basic6 ,visual basic8 , visual basic9
وفى الصيغه اكتب

رمز برمجي:
basic.

لاحظ النقطه
هذا سيعيد basic6 و basic8 و basic6
ملحوظه: فى المثال السابق النقطه ساوت ارقام ولاكنها يمكن ان تساوى اى رمز
ملحوظه: النقطه تساوى اى حرف او رمز بما فيهم النقطه نفسها اما اذا كنت تريد النقطه نفسها يجب ان تسبقها شرطه مائله \(backslash) مثلاً لو ارد البحث عن اسم ملف قصير فى DOS ستحتاج النقطه فيمكنك كتابتها بالشكل

رمز برمجي:
\.

البحث عن حرف من مجموعة حروف:
نستخدم الاقواس المربع[] لنعبر عن البحث عن اى حرف داخل الاقواس المربعه
مثال: لو حاولنا البحث عن الصيغه

رمز برمجي:
[chr]at

هذه الصيغه ستمثل hat او cat او rat
مثال اخر تخيل البحث عن

رمز برمجي:
[bB]assam

سوف تمثل الكلمات Bassam او bassam
ملحوظه : الـ Regular Expression حساس لحالة الاحرف
كما يمكن ان نستخدم المدى لاحظ ما يلى

رمز برمجي:
[0-9]  ==>> [0123456789]
[a-z]  ==>> [abcdefghigklmnopqrstuvwxyz]
[A-Z] ==>> [ABCDEFGHIJKLMNOPQRSTUVWXYZ]

كما يمكن جمع المدى هكذا

رمز برمجي:
[a-zA-Z0-9]

يمكن استخدام اى حرفين او رمزين كمدى وسوف يكون المدى مابينهم من رموز فى جدول الاسكى ASCII
مع ملاحظة ان يكون الحرف او الرمز الاول يسبق الحرف الثانى والا حدث خطأ.
مثال: للبحث عن لون فى نسق HTML يمكن استخدام الصيغه التاليه

رمز برمجي:
#[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]

البحث عنحرف من مجموعة حروف الا:
ببساطه اذا كنت تريد البحث عن اى حرف الا مجموعة حروف يمكنك استخدام الطريقه السابق
مع وضع علامه ^داخل الاقواس المربعه.
مثال

رمز برمجي:
[Ff]ile[^0-9]\.xls

للبحث عن اسماء ملفات الاكسل المسماه file او File متبوعه باى حرف او رمز وليس ارقام
لاحظ وضع العلامه ^ داخل الاقواس المربعه وليس خارجه ولاحظ ايضاُ انها توثر على كافة ما فى الاقواس المربعه وليس فقط ما يليها. اى انها تستثنى جميع ما فى الاثواس المربعه.
البحث عن المسافات البيضاء ورموز التحكم:
للبحث عن الاحرف التى لا تطبع استخدم

رمز برمجي:
[\b] Backspace \f Form feed \n Line feed \r Carriage return \t Tab \v Vertical tab

الاحرف الخاصه:
وضع مجموعة احرف فى الصيغه معنى ذلك البحث عن هذه الاحرف ولاكن هناك بعض الحروف لها معنى خاص مثل النقطه التى تعنى اى حرف او رمز وكذلط الاقواس المربعه والتى تعنى مجموعة الحروف .
ولاكن ماذا اذا كنت تريد البحث عن هذه الحروف ذاتها
الحل بسيط يجب ان يسبقها \(backslash) حتى الـ\(backslash) نفسها يجب ان يسبقها \(backslash) لتكون بالصوره \\
كما يوجد بعض الرحوف الخاصه التى تتكون من اكثر من حرف وفى الغالب تيداء بالـ\(backslash)
ويكفى اذالة الـ\(backslash) لتمثل ذاتها.
من امثلة الرموز الخاصه:

رمز برمجي:
\d Any digit (same as [0-9]) \D Any nondigit (same as [^0-9]) \w Any alphanumeric character in upper- or lower-case and underscore (same as [a-zA-Z0-9_]) \W Any nonalphanumeric or underscore character (same as [^a-zA-Z0-9_]) \s Any whitespace character (same as [\f\n\r\t\v]) \S Any nonwhitespace character (same as [^\f\n\r\t\v])

استخدام فئات POSIX :
فئات POSIX هى اختصار لبعض الصيغ
وتكون شكلها كهذا [ : print :]
لاحظ ان الاقواس المربعه تابعه للـPOSIX وليست اقواس التجميع
لاحظ ايضاً ان الـPOSIX ليست مدعومه من قبل كل اللغات
امثله لبعض الـPOSIX :

رمز برمجي:
[:alnum:] Any letter or digit, (same as [a-zA-Z0-9]) [:alpha:] Any letter (same as [a-zA-Z]) [:blank:] Space or tab (same as [\t ]) [:cntrl:] ASCII control characters (ASCII 0 through 31 and 127) [:digit:] Any digit (same as [0-9]) [:graph:] Same as [:print:] but excludes space [:lower:] Any lowercase letter (same as [a-z]) [:print:] Any printable character [:punct:] Any character that is neither in [:alnum:] nor [:cntrl:] [:space:] Any whitespace character including space (same as [\f\n\r\t\v ]) [:upper:] Any uppercase letter (same as [A-Z]) [:xdigit:] Any hexadecimal digit (same as [a-fA-F0-9])

يتبع

  1. لا توجد تعليقات حتى الأن.
  1. No trackbacks yet.

شاركنا برأيك ,لكي نرقى بالمدونة,يمكنك أضافة تعليق عن طريق حسابك في Facebook

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: