تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
Regular Expression الجزء الاول
#1
بسم الله الرحمن الرحيم
السلام عليكم


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


يمكنك الحصول على المذيد من المعلومات من خلال الرابط التالى
http://msdn.microsoft.com/en-us/libr...66(VS.71).aspx
__________________________________________________ ___________________________
[b]كيفية كتابة الصيغ لـ Regular Expression :[/b]
لقد قمت بعمل مثال صغير لتطبيق ما يلى من صيغ المثال عباره عن 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
[b][FONT=Tahoma] Vertical tab


[/FONT]

[/b]


الاحرف الخاصه:
وضع مجموعة احرف فى الصيغه معنى ذلك البحث عن هذه الاحرف ولاكن هناك بعض الحروف لها معنى خاص مثل النقطه التى تعنى اى حرف او رمز وكذلط الاقواس المربعه والتى تعنى مجموعة الحروف .
ولاكن ماذا اذا كنت تريد البحث عن هذه الحروف ذاتها
الحل بسيط يجب ان يسبقها \(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])
[b][FONT=Tahoma]


[/FONT]

[/b]


}}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم