![]() |
|
معلومة ::: Regular Expressions - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : معلومة ::: Regular Expressions (/showthread.php?tid=5281) |
معلومة ::: Regular Expressions - RaggiTech - 06-10-12 كاتب الموضوع : BADRMEDIA
حان الوقت لنتعرف علي مفهوم Regular Expressions ما معنى Regular Expressions = قواعد التعبيرات هي مجموعة من القواعد كصيغ تستخدم في مطابقة النصوص وهي عبارة عن أدوات منطقية لفحص النص والتأكد من المطابقة أو استبدال النص بنص أخر وهذا المفهوم جزء من مفاهيم Validation - أى التحقق من مدخلات المستخدم بمعنى أننا نستطيع حصر المستخدم فى مدخلات محددة - أرقام فقط مثلاً - ايميل - طول اسم محدد وهكذا العديد من الفوائد ويختصر هذا المفهوم بكلمة regex اخترع هذا المفهوم عالم الرياضيات Stephen Kleene سنة 1940 معلومة ::: Regular Expressions - RaggiTech - 06-10-12 كيف نبدأ فى استخدام 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نضع صندوق نص TextBox ونضع هذا الكود في حدث التحقق من القيم كود : Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validatingشغل المثال وتعرف على ما حدث معلومة ::: Regular Expressions - RaggiTech - 06-10-12 نفهم بعض الرموز فى التعبيرات بداية التحقق من حرف معين نستعمل المعامل ^ نهاية التحقق إلى حرف معين نستعمل المعامل $ وهذا يتضح مثل كود : "^http$"جرب أن تحذف أحد المعاملين وأن تترك الآخر وشوف ماذا سيحدث ======================================== عندما كتبنا هذا الكود كود : 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) . مثالهُ كالتالي معلومة ::: Regular Expressions - RaggiTech - 06-10-12 سنحاول نتعلم أكثر عن الرموز وكيفية استخدامها تعلم فى الردود السابقة فائدة المعامل ^ وأيضاً المعامل $ مثلا نريد تعبير لادخال بريد الكترونى على الياهو كود : "^.@yahoo.com$"ولكن بداية البريد غير معروفة طيب لو حبينا يكون معرف البريد من حرفين سنضيف نقطتين هكذا كود : "^..@yahoo.com$"طيب لو المعرف من 10 حروف هل سنضيف 10 نقط - طبعاً غير منطقي - خليكم فاكرين النقطة دى المعامل * يسمح المعامل بتكرار الحرف المذكور قبله لأي عدد من المرات أو حذفه نهائياً هنا جاء حل لمشكلة المعرف وعدد الحرف فيه طبعا سنضع معامل * بعد النقطة كود : "^.*@yahoo.com$"لكن مازال هناك مشكلة أن المستخدم يستطيع الحذف للمعرف ولا يضعه أصلاً جاء دور المعامل + المعامل + يسمح المعامل بتكرار الحرف المذكور قبله لأي عدد من المرات ولا يقبل حذفه نهائياً ويكون الأمر هكذا كود : "^.+@yahoo.com$"هل ذهبت كل المشاكل جرب تشغيل الكود بأخر حل وصلنا له وتدخل بريد بهذه القيمة badrmedia@yahoo@com طبعاً البريد السابق صيغته خطأ ومع ذلك تم قبوله لماذا ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ لأن الدوت - النقطة . تسمح بوجود أى حرف بديل مكانها جاء دور المعامل \ المعامل \ وظيفة هذا المعامل إلغاء وظيفة المعامل الذي يقع بعده ويجعله كحرف عادي أعتقد اتضح الأمر يصبح الأمر هكذا كود : "^.+@yahoo\.com$"أيه الأخبار أعتقد Regular Expressions أصبح موضوع سهل وبسيط معلومة ::: Regular Expressions - RaggiTech - 06-10-12 فى الرد السابق اتضح لنا كيفية تكوين Regular Expressions لنتعرف على بعض المعاملات الأخري المعامل {n} ذكرنا معامل النجمة * ومعامل الجمع + وعرفنا أنهما يسمحان بتكرار الحرف الذي يسبقهما لعدد غير محدد من المرات مع اختلاف بينهما ولكن ماذا لو أردنا تحديد عدد هذا التكرار ؟؟ هذه وظيفة المعامل {n} حيث نقوم باستبدال الحرف n بالرقم الذي نريد تحديد عدد التكرار على أساسه لو استخدمنا الرقم صفر بداخل الأقواس فهذا يعني أنه يكرر الحرف عدد صفر وهذا يعني حذفه المعامل ؟ علامة الاستفهام يسمح هذا المعامل بوجود الحرف الذي قبله مرة واحدة فقط أو حذفه نهائياً المعامل {min,max} لو أردت بدلاً من تحديد عدد التكرار باستخدام المعامل {n} حصر التكرار داخل نطاق معين وسيكون باستخدام المعامل {min,max} الكلمة min أقل عدد تكرار يمكن قبوله الكلمة max أكثر عدد تكرار يمكن قبوله المعامل \s يمثل هذا المعامل علامة المسافة ( الـ Space ) أو علامة الإدخال ( الـ Enter )، أو علامة الجدولة ( الـ Tab ) معلومة ::: Regular Expressions - RaggiTech - 06-10-12 المعامل \n يمثل هذا المعامل علامة الإدخال ( الـ Enter ) المعامل \t يمثل هذا المعامل علامة الجدولة ( الـ Tab ) المعامل [letters] يقوم بوظيفة معامل النقطة حيث أنه يمكنك استبداله بأي حرف الفرق الوحيد هو أن هذا الحرف يتم تحديده من خلال الحروف الموجودة داخل الأقواس المعامل [^letters] وهو عكس المعامل السابق تماماً حيث أنه يحصر الحرف البديل في أي حرف غير الحرف أو الحروف الموجودة بعد المعامل ^ على سبيل المثال لو استخدمنا المعامل [^W] فإنه يعني أنه يمكننا استبدال هذا المعامل بأي حرف بشرط ألا يكون حرف الـ W معلومة ::: Regular Expressions - RaggiTech - 06-10-12 راجع صفحة المكتبة فى ميكروسوفت على الرابط http://msdn2.microsoft.com/en-us/lib...ns(VS.90).aspx |