C # ريجكس في الأمثلة

تم إعداد ترجمة المقال خصيصًا لطلاب الدورة التدريبية "C # Developer" .




تطبق فئة Regex التعبيرات العادية في C #. في هذه المقالة ، سوف تتعلم كيفية استخدام C # Regex للتحقق من صحة إدخالات المستخدم المختلفة.

ينفذ Regex في C # تعبيرات منتظمة. توفر الفئة C # Regex طرقًا وخصائص لتحليل النص الكبير من أجل البحث عن أنماط الأحرف. في هذه المقالة ، سوف تتعلم كيفية استخدام فئة .NET Regex في C #.

التعبيرات العادية


يتم استخدام تعبير عادي للتحقق مما إذا كانت سلسلة مطابقة لنمط. تعبير عادي (تعبير عادي أو regex ، أو regexp) هو سلسلة من الأحرف التي تحدد نمط. يمكن أن يتكون النموذج من حرفية أو أرقام أو أحرف أو عوامل تشغيل أو بنى. يتم استخدام النمط للعثور على التطابقات في سلسلة أو ملف.
غالبًا ما تستخدم التعبيرات العادية عند التحقق من المدخلات والتحليل وإيجاد السلاسل. على سبيل المثال ، التحقق من تاريخ الميلاد الصحيح ورقم الضمان الاجتماعي والاسم الكامل ، حيث يتم فصل الاسم واللقب بفاصلة ، والبحث عن عدد مرات حدوث سلسلة فرعية ، واستبدال الخطوط الفرعية ، وتنسيقات التاريخ ، وتنسيقات البريد الإلكتروني الصحيحة ، وتنسيق العملة ، وما إلى ذلك.

الطبقة ريكس


في .NET ، تمثل فئة Regex مشغّلًا من regex. يمكن استخدامه لتحليل كميات كبيرة من النص بسرعة للعثور على أنماط أحرف معينة واستخراج وتحرير واستبدال أو حذف سلاسل فرعية من النص وإضافة السلاسل المستخرجة إلى المجموعة لإنشاء تقرير.

يتم تعريف فئة Regex في مساحة الاسم System.Text.RegularExpressions. يأخذ مُنشئ فئة Regex كمعلمة سلسلة قالب مع معلمات اختيارية أخرى.

يُنشئ مقتطف الشفرة التالي تعبيرًا عاديًا من نقش. هنا ، يتوافق النموذج مع كلمة تبدأ بالحرف "M".

//    ,     "M" string pattern = @"\b[M]\w+"; //   Regex Regex rg = new Regex(pattern); 


يحتوي جزء التعليمات البرمجية التالي على نص طويل بأسماء المؤلفين التي تحتاج إلى تحليل.

 //   string authors = "Mahesh Chand, Raj Kumar, Mike Gold, Allen O'Neill, Marshal Troll"; 


يتم استخدام طريقة التطابقات للعثور على جميع التطابقات في تعبير منتظم وإرجاع مطابقة المباراة.

 //    MatchCollection matchedAuthors = rg.Matches(authors); 


الجزء التالي من الكود يمر بمجموعة من التطابقات.

 //     for (int count = 0; count < matchedAuthors.Count; count++) Console.WriteLine(matchedAuthors[count].Value); 


إليك الكود الكامل:

 //    ,     "M" string pattern = @"\b[M]\w+"; //   Regex Regex rg = new Regex(pattern); //   string authors = "Mahesh Chand, Raj Kumar, Mike Gold, Allen O'Neill, Marshal Troll"; //    MatchCollection matchedAuthors = rg.Matches(authors); ///     for (int count = 0; count < matchedAuthors.Count; count++) Console.WriteLine(matchedAuthors[count].Value); 


في المثال أعلاه ، يبحث الرمز عن الحرف "M". ولكن ماذا لو كانت الكلمة تبدأ بـ "م". يستخدم مقتطف الشفرة التالي المعلمة RegexOptions.IgnoreCase بحيث لا تكون Regex حساسة لحالة الأحرف.

 //    ,     "M" string pattern = @"\b[m]\w+"; //   Regex Regex rg = new Regex(pattern, RegexOptions.IgnoreCase); 


استبدال مسافات متعددة بـ Regex


يتم استخدام الأسلوب Regex.Replace() لاستبدال السلسلة المتطابقة بسلسلة جديدة. المثال التالي يبحث عن مسافات متعددة في سلسلة واحدة.

 //      string badString = "Here is a strig with ton of white space." ; string CleanedString = Regex.Replace(badString, "\\s+", " "); Console.WriteLine($"Cleaned String: {CleanedString}"); 


يستبدل مقتطف الشفرة التالي المسافات بـ "-".

 string CleanedString = Regex.Replace(badString, "\\s+", "-"); 


تقسيم السلسلة إلى أحرف باستخدام Regex


في المثال التالي ، يتم استخدام نمط التعبير العادي [az] + وأسلوب Regex.Split() لتقسيم سلسلة إلى أحرف ، وليس Regex.Split() .

 //     string azpattern = "[az]+"; string str = "Asd2323b0900c1234Def5678Ghi9012Jklm"; string[] result = Regex.Split(str, azpattern, RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(500)); for (int i = 0; i < result.Length; i++) { Console.Write("'{0}'", result[i]); if (i < result.Length - 1) Console.Write(", "); } 


التعبيرات العادية في C #


التعبيرات العادية هي المعيار المطابق للنمط في تحليل السلاسل وتغييرها ، وتسمح للمستخدم بالتعبير عن الطريقة التي ينبغي أن يبحث بها برنامج الكمبيوتر عن النموذج المحدد في النص ، ثم ما الذي يجب عمله عند العثور على كل تطابق مع النموذج المحدد. في بعض الأحيان يتم اختصار أنها "regex". إنها طريقة فعالة للعثور على السلاسل التي تأخذ شكل معين وتعديلها.

فيما يلي مثال بسيط للرمز C # يوضح كيفية استخدام التعبيرات العادية.

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace RegularExpression1 { class Program { static void Main(string[] args) { Regex r = new Regex(@"^\+?\d{0,2}\-?\d{4,5}\-?\d{5,6}"); //  Regex    . string[] str = { "+91-9678967101", "9678967101", "+91-9678-967101", "+91-96789-67101", "+919678967101" }; //         . foreach (string s in str) { Console.WriteLine("{0} {1} a valid mobile number.", s, r.IsMatch(s) ? "is" : "is not"); //  IsMatch    ,   ,     . } } } } 


فيما يلي شرح مفصل للتعبيرات العادية واستخدامها في C # و .NET:
التعبيرات العادية في C #

ريجكس لفحص البريد الإلكتروني


لاختبار عناوين بريد إلكتروني متعددة ، يمكننا استخدام التعبيرات العادية التالية. نحن نفصل العناوين باستخدام المحدد "؛"

^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[;]{0,1}\s*)+$

إذا كنت تريد استخدام المحدد "،" فاستخدم ما يلي

^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[,]{0,1}\s*)+$

وإذا كنت تريد استخدام كل من المحددات "و" و "؛" ثم استخدم هذا

^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[;,.]{0,1}\s*)+$

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

اكتشف المزيد هنا: Regex للتحقق من عناوين البريد الإلكتروني المتعددة .

التحقق من صحة إدخال المستخدم مع التعبيرات العادية


يشرح هذا المقال كيفية استخدام التعبيرات العادية (فئة Regex من مساحة الاسم System.Text.RegularExpressions) في C # و .NET.

يمكننا استخدام طريقة Regex.Match ، والتي تأخذ المدخلات والتعبير المنتظم ، وتعيد النجاح إذا

 if (!Regex.Match(firstNameTextBox.Text, "^[AZ][a-zA-Z]*$").Success) {} if (!Regex.Match(addressTextBox.Text, @"^[0-9]+\s+([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success) if (!Regex.Match(cityTextBox.Text, @"^([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success) if (!Regex.Match(stateTextBox.Text, @"^([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success) if (!Regex.Match(zipCodeTextBox.Text, @"^\d{5}$").Success) { if (!Regex.Match(phoneTextBox.Text, @"^[1-9]\d{2}-[1-9]\d{2}-\d{4}$").Success) 


اكتشف المزيد هنا:
التحقق من صحة إدخال المستخدم مع التعبيرات العادية


تقسيم السلسلة باستخدام Regex.split (regex) في C #


في هذا الجزء ، سنتعلم كيفية كسر سلسلة باستخدام RegEx في C #. Regex يكسر سلسلة بناء على نمط. يقوم بمعالجة المحدد المحدد كقالب. هذا هو السبب في أن Regex أفضل من string.Split. فيما يلي بعض الأمثلة عن كيفية كسر سلسلة باستخدام Regex في C #. دعنا نكتب الكود

لاستخدام Regex لتقسيم سلسلة ، أضف مساحات الأسماء التالية.

 using System; using System.Text.RegularExpressions; using System.Collections.Generic; 


مثال 1:

افصل الأرقام عن الجمل باستخدام Regex.

 string Text = "1 One, 2 Two, 3 Three is good."; string[] digits = Regex.Split(Text, @"\D+"); foreach (string value in digits) { int number; if (int.TryParse(value, out number)) { Console.WriteLine(value); } } 


يكسر الرمز أعلاه السلسلة باستخدام \ D + ، ويقوم بإخراج الأرقام بالتكرار على النتيجة.

اكتشف المزيد هنا:

تقسيم السلسلة باستخدام التعبيرات العادية في C #

استبدال الأحرف الخاصة من السلسلة بـ regex


في هذا الجزء ، سأخبرك عن كيفية استبدال الأحرف الخاصة بتعابير منتظمة في C #.

إذا كان لديك سلسلة ذات أحرف خاصة وتريد إزالتها أو استبدالها ، فيمكنك استخدام تعبير عادي لهذا.

استخدم الكود التالي:

 Regex.Replace(your String, @"[^0-9a-zA-Z]+", "") 


سيؤدي هذا الرمز إلى حذف جميع الأحرف الخاصة ، ولكن إذا كنت لا ترغب في حذف بعض الأحرف الخاصة ، على سبيل المثال ، الفاصلة "،" والنقطتين ":" - قم بإجراء التغييرات التالية:

 Regex.Replace(Your String, @"[^0-9a-zA-Z:,]+", "") 


بنفس الطريقة ، يمكنك إجراء تغييرات وفقًا لمتطلباتك.

ملاحظة:

تجدر الإشارة إلى أن التعبيرات العادية ليست حلا سحريا لكل تلاعب في السلسلة الصغيرة. إذا كنت بحاجة إلى تحليل بسيط مقدم من فئة السلسلة أو الفئات الأخرى ، فحاول استخدامه.


لمزيد من القراءة



إذا كنت جديدًا في التعبيرات العادية ، أوصي بقراءة هذه المقالة ، مقدمة إلى التعبيرات العادية .

إليك مقالة أخرى: " استخدام التعبيرات العادية في C # "

Source: https://habr.com/ru/post/ar469989/


All Articles