![]() |
|
[مقال] شرح التعابير القياسية Regex - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : [مقال] شرح التعابير القياسية Regex (/showthread.php?tid=467) |
شرح التعابير القياسية Regex - 3booody - 10-10-13 بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته الحمدلله والصلاة والسلام على رسوله الكريم محمد وعلى اله واصحابه احببت ان اضع هذا المقال واعتذر بشدة ان لم اعرف شرح موضوعه بصوره جيدة ومفهومه فأنا ضعيف قليلآ في الشرح , مقالي سوف يكون ان شاء الله عن التعابير القياسية والتي تسمى Regex وهي عبارة عن فئة تابعة لمجال الاسماء System.Text.RegularExpressions فوائدها هو التحقق من النصوص ان كانت عربية او انكلزية او اردت ان تتأكد من صحة البريد الالكتروني مكتوب بصوره صحيحة او رقم هاتف وغيرها كثيرآ. على بركة الله... اولآ نقوم بإستدعاء مجال الاسماء System.Text.RegularExpressions ثم نقوم بإنشاء فئة جديده بإرسال مشيد من النوع String كود : Dim Rgx As New Regex("نص تحقق")هو عبارة عن نص يتم التحقق منه ويمكن كتابة رموز لوضع شروط معينة مثلآ اذا الكلمة كانت في بداية الجمله أو بعدها شي معين أو غيرها. الان تطبيق عملي نقوم بفتح فورم جديد ووضع صندوق نص وزر بوتون نكتب الكود التالي في زر بوتون كود : Dim Rgx As New Regex("Vb")الكود السابق للبحث عن كلمة Vb اذا وجدها في صندوق النص راح يظهر صح , ولاتنسى ان الحروف الصغيرة تختلف عن الحروف الكبيره طيب فهمنا الغرض الان نضع شرط ان يبحث عن نفس الكلمة لكن اذا كانت في بداية الجمله فقط نضع هذا الرمز ^ قبل الكلمة كود : Dim Rgx As New Regex("^Vb") و اذا اردنا ان نتأكد ان الكلمة موجوده في نهاية الجمله نضع هذا الرمز $ في نهاية الكلمة كود : Dim Rgx As New Regex("Vb$") ايضآ يمكن استخدام الاقواس[] ووضع احرف او ارقام بها وهي للتأكد ان احد الاحرف موجوده مثلآ كود : Dim Rgx As New Regex("[ab]") كما نستخدم . النقطة للبحث عن أي حرف في كلمة معينة مثلآ لو اردت البحث عن أي كلمة تحتوي حروف معينة ولا تعرف الحرف الوسطي لها كود : Dim Rgx As New Regex("3booo.y") اما اذا اردنا البحث عن رمز من الرموز التي ذكرتها طبعآ المترجم يعتبرها كما هي الا بشرط ان تضع \ قبلها كود : Dim Rgx As New Regex("Vb\.Net") وتستطيع وضع شروط اكثر مثلآ التحقق اذا كان النص المدخل يحتوي على حروف انكليزية صغيرة بين الحرفين الذان تضعهما من خلال وضع الحرف الاول و - والحرف الثاني داخل القوسين [] كود : Dim Rgx As New Regex("[a-k]") واذا اردت عن حروف كبيرة نفس الشي مع تغيير الحروف كود : Dim Rgx As New Regex("[A-Z]")بل واكثر تستطيع البحث عن الحروف الصغيرة والكبيرة كود : Dim Rgx As New Regex("[a-zA-Z]")وللتأكد ان هناك حروف عربية داخل النص نضع كود : Dim Rgx As New Regex("[ء-ي]") للتأكد ان هناك رقم كود : Dim Rgx As New Regex("[0-9]")بسبب الوقت... يتبع لاحقآآ..... RE: شرح التعابير القياسية Regex - سعود - 12-10-13 بارك الله فيك ياليت امثلة للبحث عن النصوص الشائعة مثل نصوص روابط اتش ام ال يعني بدءا من كود : <a hrefRE: شرح التعابير القياسية Regex - 3booody - 12-10-13 ان شاء الله تدلل اخي انا حاليآ اعمل على تكملة الشرح وراح اضع الطريقة الك RE: شرح التعابير القياسية Regex - sooriaty03 - 12-10-13 السلام عليكم ورحمة الله وبركاته شرح جميل جدا وموضوع متعوب عليه بشدة بارك الله فيك أخي عبووودي وجعله الله في ميزان حسناتك RE: شرح التعابير القياسية Regex - 3booody - 13-10-13 تستخدم الفاصلة | للتحقق من وجود احدى الكلمات كود : 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 كتب : السلام عليكم ورحمة الله وبركاته وفيك بارك الله وجزاك خيرآ اخي الغالي شكرآ على مرورك RE: شرح التعابير القياسية Regex - سعود - 13-10-13 اخي الكريم بارك الله فيك لاني اجهل الامور هذي فلا تستبعد معاودة السؤال والطلب هل استطيع استبدالها بصياغة رابط جديد؟؟ RE: شرح التعابير القياسية Regex - 3booody - 13-10-13 نعم اخي سعود هل طلبك هو تبديل الرابط النصي فقط؟لان تستطيع ذالك بدون استخدام Regex RE: شرح التعابير القياسية Regex - سعود - 13-10-13 اعرف ذلك اخي الاشكالية المتغيرات واريد عمل برنامج يعمل بشكل ديناميكي لو كانت الروابط ثابتة الامر بسيط جدا لكن مثل ماقلت. مثلا لديك هذه الصفحة http://vb4arb.com/vb/showthread.php?tid=467 لدي كود اقوم بفحصها ان احتوت مرفق اريد جعل الرابط لاسم المرفق فقط مثلا attachment.php?aid=302 اريد ان يكون مكانه اسم الملف المرفق مثل ماتشوف الرقم حيتغير من صفحة لاخرى اريد ان يكون الارتباط فقط لاسم المرفق لانه يتم تحميله بنفس المجلد على كل حال بالنسبة لي الامر لا يخلو من تعقيد لاني اريد التعامل بشكل ديناميكي او اوتوماتيكي بحيث اسرد صفحات بعدد مواضيع المنتدى فلا بد ان استخدم طريقة تنفذ الفكرة لو على رابط واحد معلوم الامر سهل اعذروني لاني اجد صعوبة في تطبيق الفكرة مع انه لم يتبقى الا هذه الجزئية فقط طيب اخوي اريد ان اسهل العملية وهو اريد ان وجد اي جملة تحتوي كود : <a hrefكود : <a targetكود : </a>انتهى RE: شرح التعابير القياسية Regex - Abu Ehab - 13-10-13 رائـــــــــــع ... الله يعـــــــــــطيك العــــــــــــافية .... ويرزقك الجــــــــنه . RE: شرح التعابير القياسية Regex - سعود - 13-10-13 ابشركم عرفت الطريقة اقصد تمكنت من تطبيق الفكرة عن طريق الـ regex باذن الله بعد انهاء المشروع سارفعه ليكون مثال يمكن تطبيقه لاي اسم مستخدم وساحاول امكانية استخدام نسخ اخرى مثل ipb,vbulletin وغيرها فعلا كلمات بسيطة من regex انجزت فكرة مذهلة شكرا وبارك الله فيك اخي 3booody |