تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
معلومة ::: Regular Expressions
#1
كاتب الموضوع : BADRMEDIA


حان الوقت لنتعرف علي مفهوم Regular Expressions

ما معنى Regular Expressions = قواعد التعبيرات

هي مجموعة من القواعد كصيغ تستخدم في مطابقة النصوص وهي عبارة عن أدوات منطقية

لفحص النص والتأكد من المطابقة أو استبدال النص بنص أخر

وهذا المفهوم جزء من مفاهيم Validation - أى التحقق من مدخلات المستخدم

بمعنى أننا نستطيع حصر المستخدم فى مدخلات محددة - أرقام فقط مثلاً - ايميل - طول اسم محدد وهكذا العديد من الفوائد

ويختصر هذا المفهوم بكلمة regex

اخترع هذا المفهوم عالم الرياضيات Stephen Kleene سنة 1940
}}}}
تم الشكر بواسطة:
#2
كيف نبدأ فى استخدام Regular Expressions

أول شئ نضيف فضاء الاسم Name Space إلى النافذة الخاص بهذه التعبيرات وهو



كود :
Imports System.Text.RegularExpressions

مثال علي تعبير من أجل عنوان الموقع

نعرف متغير ثابت هكذا


كود :
Const Website As String = "^http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"


نكتب هذه Function


كود :
Public Shared Function ValidatewebsiteString(ByVal TheString As String) As Boolean
Try
Dim regx As New Regex(Website)
Return regx.IsMatch(TheString)
Catch exc As FormatException
Throw exc
Catch exc As Exception
Throw exc
End Try

End Function


نضع صندوق نص TextBox

ونضع هذا الكود في حدث التحقق من القيم


كود :
Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
Try
Me.TextBox1.Text = Trim(Me.TextBox1.Text)
If Not ValidatewebsiteString(Me.TextBox1.Text) Then
e.Cancel = True
MsgBox("Please Insert WebSite")
End If
Catch ex As Exception

End Try

End Sub



شغل المثال وتعرف على ما حدث
}}}}
تم الشكر بواسطة:
#3
نفهم بعض الرموز فى التعبيرات

بداية التحقق من حرف معين نستعمل المعامل ^
نهاية التحقق إلى حرف معين نستعمل المعامل $

وهذا يتضح مثل



كود :
"^http$"
أى لابد أن يكون بداية الكلمة حرف H ونهايتها حرف P


جرب أن تحذف أحد المعاملين وأن تترك الآخر وشوف ماذا سيحدث



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


عندما كتبنا هذا الكود



كود :
Dim regx As New Regex(Website)

نجد عند تنفيذ التطبيق وادخال قيم أن حالة الأحرف لو اختلفت عن ما هو مطلوب تعطي رسالة التحقق - تنبيه باختلاف المدخل


هناك بعذ الخواص عند تعريف
Regular Expressions

نستطيع أن نتعرف عليها


RegexOptions.IgnoreCase :

لتجاهل حالة الأحرف

مثال :

كود :
Dim regx As New Regex(Website, RegexOptions.IgnoreCase)

RegexOptions.None :

وتعني أنه لا خيار معين تم تحديده

RegexOptions.Compiled :

تعني أن الـ Pattern يترجم ككل وهذا أسرع ولكن يأخذ وقت في بدء التشغيل


RegexOptions.CultureInvariant :

التعامل مع الـ Pattern وفقاً لثقافة معينة


ECMA :

مصدر jScript و Action Script و تعني إستخدام نمط البرمجة على نحوها ونصوصها


RegexOptions.IgnorePatternWhitespace :

تقوم بتجاهل الفراغات داخل Pattern


RegexOptions.Multiline :

تغير نمط ^ بحيث يصبح له معني أخر وهو مطابقة بداية النص أو كل مقطع في النص


RegexOptions.RightToLeft :

بدء المطابقة من اليمين إلى الشمال


RegexOptions.Singleline :

إرجاع معنى ^ على اساس أنه يقوم بمطابقة أولا النص فقط


بمعنى أنه عكس RegexOptions.Multiline تماماً

وأيضاً مقدم عليها

^ هى RegexOptions.Singleline

أما RegexOptions.Multiline نستخدم (?m)

مثال :


"(?m)^'.+$"


معى اننا عرفنا فى الأول RegexOptions.Multiline ثم RegexOptions.Singleline

إلا أن RegexOptions.Singleline هى التى ستستخدم لأنها مقدمة عليها



على الأداة (?m) بحيث لو تم تعريفها في

الصيغة ثم قمنا بإستخدام القيمة SingleLine سيتم إعتماده و تجاهل الأداة (?m) . مثالهُ كالتالي
}}}}
تم الشكر بواسطة:
#4
سنحاول نتعلم أكثر عن الرموز وكيفية استخدامها

تعلم فى الردود السابقة فائدة المعامل ^ وأيضاً المعامل $

مثلا نريد تعبير لادخال بريد الكترونى على الياهو



كود :
"^.@yahoo.com$"
طبعاً سينتهى البريد بـــ Com

ولكن بداية البريد غير معروفة


طيب لو حبينا يكون معرف البريد من حرفين

سنضيف نقطتين هكذا



كود :
"^..@yahoo.com$"

طيب لو المعرف من 10 حروف هل سنضيف 10 نقط - طبعاً غير منطقي - خليكم فاكرين النقطة دى


المعامل *

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


هنا جاء حل لمشكلة المعرف وعدد الحرف فيه

طبعا سنضع معامل * بعد النقطة


كود :
"^.*@yahoo.com$"

لكن مازال هناك مشكلة أن المستخدم يستطيع الحذف للمعرف ولا يضعه أصلاً

جاء دور المعامل +

المعامل +

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


ويكون الأمر هكذا



كود :
"^.+@yahoo.com$"

هل ذهبت كل المشاكل

جرب تشغيل الكود بأخر حل وصلنا له وتدخل بريد بهذه القيمة

badrmedia@yahoo@com


طبعاً البريد السابق صيغته خطأ ومع ذلك تم قبوله لماذا ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟


لأن الدوت - النقطة . تسمح بوجود أى حرف بديل مكانها

جاء دور المعامل \


المعامل \


وظيفة هذا المعامل إلغاء وظيفة المعامل الذي يقع بعده ويجعله كحرف عادي

أعتقد اتضح الأمر


يصبح الأمر هكذا



كود :
"^.+@yahoo\.com$"

أيه الأخبار

أعتقد Regular Expressions أصبح موضوع سهل وبسيط
}}}}
تم الشكر بواسطة:
#5
فى الرد السابق اتضح لنا كيفية تكوين Regular Expressions


لنتعرف على بعض المعاملات الأخري


المعامل {n}

ذكرنا معامل النجمة * ومعامل الجمع +
وعرفنا أنهما يسمحان بتكرار الحرف الذي يسبقهما لعدد غير محدد من المرات
مع اختلاف بينهما ولكن ماذا لو أردنا تحديد عدد هذا التكرار ؟؟
هذه وظيفة المعامل {n} حيث نقوم باستبدال الحرف n بالرقم الذي نريد تحديد عدد التكرار على أساسه

لو استخدمنا الرقم صفر بداخل الأقواس فهذا يعني أنه يكرر الحرف عدد صفر وهذا يعني حذفه



المعامل ؟ علامة الاستفهام

يسمح هذا المعامل بوجود الحرف الذي قبله مرة واحدة فقط أو حذفه نهائياً


المعامل {min,max}

لو أردت بدلاً من تحديد عدد التكرار باستخدام المعامل {n}

حصر التكرار داخل نطاق معين وسيكون باستخدام المعامل {min,max}

الكلمة min أقل عدد تكرار يمكن قبوله
الكلمة max أكثر عدد تكرار يمكن قبوله



المعامل \s


يمثل هذا المعامل علامة المسافة ( الـ Space ) أو علامة الإدخال ( الـ Enter )، أو علامة الجدولة ( الـ Tab )
}}}}
تم الشكر بواسطة:
#6
المعامل \n

يمثل هذا المعامل علامة الإدخال ( الـ Enter )


المعامل \t

يمثل هذا المعامل علامة الجدولة ( الـ Tab )



المعامل [letters]

يقوم بوظيفة معامل النقطة حيث أنه يمكنك استبداله بأي حرف
الفرق الوحيد هو أن هذا الحرف يتم تحديده من خلال الحروف الموجودة داخل الأقواس


المعامل [^letters]

وهو عكس المعامل السابق تماماً حيث أنه يحصر الحرف البديل في أي حرف غير الحرف أو الحروف الموجودة بعد المعامل ^
على سبيل المثال لو استخدمنا المعامل [^W] فإنه يعني أنه يمكننا استبدال هذا المعامل بأي حرف بشرط ألا يكون حرف الـ W
}}}}
تم الشكر بواسطة:
#7
راجع صفحة المكتبة فى ميكروسوفت على الرابط

http://msdn2.microsoft.com/en-us/lib...ns(VS.90).aspx
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  معلومة ::: ListBox Blue Sky 14 2,478 14-11-16, 11:32 PM
آخر رد: فارس جراح
  معلومة مهمه فى المصفوفات ali.alfoly 2 801 30-08-13, 02:25 AM
آخر رد: ali.alfoly
  من المنتدى القديم - معلومة ::: ProgressBar ( للاخ BADRMEDIA ) المبرمج علي نوري 2 1,274 23-08-13, 11:17 PM
آخر رد: nin9e
  معلومة :: تعلم كيف تحفظ صورة في My.Settings بدون الإحتياج إلى مسارها! أسامة أحمد 3 1,030 16-12-12, 06:25 PM
آخر رد: 3amo
  من المنتدى القديم - معلومة ::: CheckBox ( للاخ BADRMEDIA ) المبرمج علي نوري 1 578 30-11-12, 05:54 PM
آخر رد: مبرمج أوتار
  معلومة :: الحل لمشكلة الخطأ في الكود For Each i As Button In Me.Controls Aly El-Haddad 2 684 10-11-12, 09:15 PM
آخر رد: Mr. DotNet
  معلومة : Partial Class RaggiTech 1 548 06-10-12, 11:03 PM
آخر رد: RaggiTech
  معلومة : TryCast مهمة RaggiTech 0 466 06-10-12, 11:02 PM
آخر رد: RaggiTech
  معلومة : XML Comments مهمة RaggiTech 1 426 06-10-12, 11:01 PM
آخر رد: RaggiTech
  معلومة - الاستثناءات ( Exceptions ) RaggiTech 0 537 06-10-12, 11:00 PM
آخر رد: RaggiTech

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


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