تقييم الموضوع :
  • 2 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
[مقال] شرح التعابير القياسية Regex
#1
بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته


الحمدلله والصلاة والسلام على رسوله الكريم محمد وعلى اله واصحابه

احببت ان اضع هذا المقال واعتذر بشدة ان لم اعرف شرح موضوعه بصوره جيدة ومفهومه فأنا ضعيف قليلآ في الشرح , مقالي سوف يكون ان شاء الله عن التعابير القياسية والتي تسمى Regex
وهي عبارة عن فئة تابعة لمجال الاسماء
System.Text.RegularExpressions
فوائدها هو التحقق من النصوص ان كانت عربية او انكلزية او اردت ان تتأكد من صحة البريد الالكتروني مكتوب بصوره صحيحة او رقم هاتف وغيرها كثيرآ.
على بركة الله...
اولآ نقوم بإستدعاء مجال الاسماء
System.Text.RegularExpressions
ثم نقوم بإنشاء فئة جديده بإرسال مشيد من النوع String

كود :
Dim Rgx As New Regex("نص تحقق")
ماهو المشيد الذي نرسله؟؟
هو عبارة عن نص يتم التحقق منه ويمكن كتابة رموز لوضع شروط معينة مثلآ اذا الكلمة كانت في بداية الجمله أو بعدها شي معين أو غيرها.
الان تطبيق عملي نقوم بفتح فورم جديد ووضع صندوق نص وزر بوتون
نكتب الكود التالي في زر بوتون


كود :
Dim Rgx As New Regex("Vb")
        If Rgx.IsMatch(TextBox1.Text) Then
            MsgBox("الكلمة موجوده")
        Else
            MsgBox("الكلمة غير موجوده")
        End If

الكود السابق للبحث عن كلمة Vb اذا وجدها في صندوق النص راح يظهر صح , ولاتنسى ان الحروف الصغيرة تختلف عن الحروف الكبيره

طيب فهمنا الغرض الان نضع شرط ان يبحث عن نفس الكلمة لكن اذا كانت في بداية الجمله فقط نضع هذا الرمز ^ قبل الكلمة
كود :
Dim Rgx As New Regex("^Vb")
        If Rgx.IsMatch(TextBox1.Text) Then
            MsgBox("الكلمة موجوده في بداية الجمله")
        Else
            MsgBox("الكلمة غير موجوده في بداية الجمله")
        End If


و اذا اردنا ان نتأكد ان الكلمة موجوده في نهاية الجمله نضع هذا الرمز $ في نهاية الكلمة
كود :
Dim Rgx As New Regex("Vb$")
        If Rgx.IsMatch(TextBox1.Text) Then
            MsgBox("الكلمة موجوده في نهاية الجمله")
        Else
            MsgBox("الكلمة غير موجوده في نهاية الجمله")
        End If



ايضآ يمكن استخدام الاقواس[] ووضع احرف او ارقام بها وهي للتأكد ان احد الاحرف موجوده مثلآ

كود :
Dim Rgx As New Regex("[ab]")
        MsgBox(Rgx.IsMatch(TextBox1.Text))
بمعنى اذا وجد احد الحرفين يظهر صح




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

كود :
Dim Rgx As New Regex("3booo.y")
        MsgBox(Rgx.IsMatch(TextBox1.Text))




اما اذا اردنا البحث عن رمز من الرموز التي ذكرتها طبعآ المترجم يعتبرها كما هي الا بشرط ان تضع \ قبلها

كود :
Dim Rgx As New Regex("Vb\.Net")
        MsgBox(Rgx.IsMatch(TextBox1.Text))



وتستطيع وضع شروط اكثر مثلآ التحقق اذا كان النص المدخل يحتوي على حروف انكليزية صغيرة بين الحرفين الذان تضعهما من خلال وضع الحرف الاول و - والحرف الثاني داخل القوسين []

كود :
Dim Rgx As New Regex("[a-k]")
        MsgBox(Rgx.IsMatch(TextBox1.Text))




واذا اردت عن حروف كبيرة نفس الشي مع تغيير الحروف

كود :
Dim Rgx As New Regex("[A-Z]")

بل واكثر تستطيع البحث عن الحروف الصغيرة والكبيرة

كود :
Dim Rgx As New Regex("[a-zA-Z]")
        MsgBox(Rgx.IsMatch(TextBox1.Text))

وللتأكد ان هناك حروف عربية داخل النص نضع

كود :
Dim Rgx As New Regex("[ء-ي]")
        MsgBox(Rgx.IsMatch(TextBox1.Text))




للتأكد ان هناك رقم

كود :
Dim Rgx As New Regex("[0-9]")
        MsgBox(Rgx.IsMatch(TextBox1.Text))

بسبب الوقت... يتبع لاحقآآ.....
الرد }}}
#2
بارك الله فيك
ياليت امثلة للبحث عن النصوص الشائعة مثل نصوص روابط اتش ام ال يعني بدءا من
كود :
<a href
الى وسم الاغلاق للرابط ايضا ياليت معلومات الاستبدال باي نص اخر.
الرد }}}
تم الشكر بواسطة: 3booody , H_BioMed , asemshahen5
#3
ان شاء الله تدلل اخي انا حاليآ اعمل على تكملة الشرح وراح اضع الطريقة الك
الرد }}}
تم الشكر بواسطة: asemshahen5 , asemshahen5
#4
السلام عليكم ورحمة الله وبركاته

شرح جميل جدا
وموضوع متعوب عليه بشدة

بارك الله فيك أخي عبووودي
وجعله الله في ميزان حسناتك
الرد }}}
تم الشكر بواسطة: 3booody , asemshahen5
#5
تستخدم الفاصلة | للتحقق من وجود احدى الكلمات

كود :
MsgBox(Regex.IsMatch(TextBox1.Text, "sooriaty03|@@أبورائد@@|Sajad"))

اذا وجد اسم من الاسماء يعود بالقيمه True

طيب لو اردنا البحث عن كلمة تبدآ بحرف معين وتنتهي بحرف معين ولانعرف عدد الحروف الوسطى لها نستخدم رمز . مع الرمز *

كود :
MsgBox(Regex.IsMatch(TextBox1.Text, "a.*h"))



لاحظ حتى اذا تركنا الحرفين فقط بهالشكل ah يظهر قيمة صح والسبب التالي:

علامة *تاخذ عدد حروف من 0 واكثر بمعنى اذا كان لم يكن هناك حرف بين
a و h يظهر صح واذا كان هناك حرف او اكثر ايضآ يظهر صح
لذلك يتوجب عليك معرفة الرموز التالية وهي:
رمز * >>> يستخدم لتحديد عدد التكرار 0 او اكثر
رمز + >>> يستخدم لتحديد عدد التكرار 1 او اكثر
رمز ? >>> يستخدم لتحديد عدد التكرار اما 1 او صفر
اما اذا كنا نعرف عدد الحروف المكرره فنكتبها بين قوسين{}

كود :
MsgBox(Regex.IsMatch(TextBox1.Text, "a.{6}h"))

بهذي الحالة اذا كانت الكلمة هي abulayth يظهر صح والسبب عدد الحروف بين a و h هي 6

ايضا يمكن وضع شرط اذا كان العدد بين عددين من خلال القوسين

كود :
MsgBox(Regex.IsMatch(TextBox1.Text, "a.{5,7}h"))

بمعنى اذا كان هناك 5 او 6 او 7 حروف بين a و h يظهر صح

وكما قال اخي سعود كيف التحقق ان النص المدخل عباره عن وسم؟الامر بسيط لاحظ الكود

كود :
MsgBox(Regex.IsMatch(TextBox1.Text, "(<a haref=)(.*)(</a>)"))

كما تلاحظ استخدمت * بدليل لا اعرف عدد الحروف الوسطى.

واخيرآ اختم مقالي بهذا المثال البسيط للتحقق ان النص المدخل هو بريد الكتروني

كود :
MsgBox(Regex.IsMatch(TextBox1.Text, "([a-z0-9\._]{5,20})(@)(yahoo|gmail)(\.com)"))

شرح الكود:
اسم من 5 حروف الى 20 حرف شرط ان يكون حروف انكليزية صغيرة ومسموح برمزين . و _ وارقام فقط
علامة @ واختيار نوع الاميل ياهو او جي ميل فقط وضع com. في النهاية.

صح اني ماقدم كثير لكن ان شاء الله يكون موضوع استفاده للجميع
وفقني الله واياكم لما يحب ويرضاه.

والسلام عليكم ورحمة الله وبركاته

(12-10-13, 12:53 PM)sooriaty03 كتب : السلام عليكم ورحمة الله وبركاته

شرح جميل جدا
وموضوع متعوب عليه بشدة

بارك الله فيك أخي عبووودي
وجعله الله في ميزان حسناتك

وفيك بارك الله وجزاك خيرآ اخي الغالي شكرآ على مرورك
الرد }}}
#6
اخي الكريم بارك الله فيك
لاني اجهل الامور هذي فلا تستبعد معاودة السؤال والطلب

هل استطيع استبدالها بصياغة رابط جديد؟؟
الرد }}}
تم الشكر بواسطة: asemshahen5
#7
نعم اخي سعود هل طلبك هو تبديل الرابط النصي فقط؟لان تستطيع ذالك بدون استخدام Regex
الرد }}}
تم الشكر بواسطة: asemshahen5
#8
اعرف ذلك اخي الاشكالية المتغيرات واريد عمل برنامج يعمل بشكل ديناميكي لو كانت الروابط ثابتة الامر بسيط جدا لكن مثل ماقلت.
مثلا لديك هذه الصفحة
http://vb4arb.com/vb/showthread.php?tid=467
لدي كود اقوم بفحصها ان احتوت مرفق اريد جعل الرابط لاسم المرفق فقط مثلا
attachment.php?aid=302
اريد ان يكون مكانه اسم الملف المرفق
مثل ماتشوف الرقم حيتغير من صفحة لاخرى
اريد ان يكون الارتباط فقط لاسم المرفق لانه يتم تحميله بنفس المجلد
على كل حال بالنسبة لي الامر لا يخلو من تعقيد لاني اريد التعامل بشكل ديناميكي او اوتوماتيكي بحيث اسرد صفحات بعدد مواضيع المنتدى فلا بد ان استخدم طريقة تنفذ الفكرة لو على رابط واحد معلوم الامر سهل
اعذروني لاني اجد صعوبة في تطبيق الفكرة مع انه لم يتبقى الا هذه الجزئية فقط

طيب اخوي اريد ان اسهل العملية
وهو اريد ان وجد اي جملة تحتوي
كود :
<a href
او

كود :
<a target
وتنتهي بـ
كود :
</a>
اريد استبدالها بشكل كامل لو اجد هذه الطريقة اكون انهيت المشروع الذي سيفيدني كثيرا
انتهى
الرد }}}
تم الشكر بواسطة: asemshahen5
#9
رائـــــــــــع ... الله يعـــــــــــطيك العــــــــــــافية .... ويرزقك الجــــــــنه .
Abu Ehab : Microsoft Partner  & Systems Developer
 Youtube   Facebook    Twitter   
الرد }}}
تم الشكر بواسطة: 3booody , asemshahen5 , asemshahen5
#10
ابشركم عرفت الطريقة اقصد تمكنت من تطبيق الفكرة عن طريق الـ regex
باذن الله بعد انهاء المشروع سارفعه ليكون مثال يمكن تطبيقه لاي اسم مستخدم وساحاول امكانية استخدام نسخ اخرى مثل ipb,vbulletin وغيرها
فعلا كلمات بسيطة من regex انجزت فكرة مذهلة
شكرا وبارك الله فيك اخي 3booody
الرد }}}
تم الشكر بواسطة: 3booody , asemshahen5 , asemshahen5 , Miloud , menanaeem


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


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