التعابير النظامية Regular Expressions

الموضوع له علاقة بالذكاء الاصطناعي وهو البحث في النصوص عن طريق pattern هذا ال pattern تحكمه صيغ كتابة تحدد طريقة البحث (Regular Expressions) ثم يتم اضافة input وهو النص الذي يبحث بداخله ال pattern ويعيد النصوص المطابقة له (Matches) او true or false في حال وجد نص يطابقه (IsMatch) او عمليات مثل Split او Replace .

ابسط مثال

string text = "hi my name is mohammed";
string pattern = @"hi\s";//"hi "
print(Regex.IsMatch(text, pattern));//true
//or
string text = "hi my name is mohammed";
string pattern = @"\smy\s";//" my "
Regex reg = new Regex(pattern);
print(reg.IsMatch(text));//true

كما ترى Regex هو الكلاسس المسؤول عن الاختبار ويحتوي عل static methods او object oriented methods .

اهم التعابير النظامية

^ بداية نص او سطر
$ نهاية نص او سطر
. تعني اي رمز باستثناء سطر جديد
* تعني من 0 الى مالانهاية

string input = @"hi my name is mohammed iam from jeddah";
string pattern = @"^hi.+h$";//"hi my name is mohammed iam from jeddah"
Regex reg = new Regex(pattern);
print(reg.IsMatch(input));//true

امثلة على قوسين []

string input = @"hi my name is mohammed iam from jeddah";
string pattern = @"[ao]m$";//"am" in name and "am" in mohammed and "om" in from 
//=============================
string input = @"hi my name is mohammed iam from jeddah";
string pattern = @"[^ao]m$";//" m" in " my" and all texts second character is "m" and first character is not a or o  
//============================
string input = @"hi my name is mohammed iam from jeddah";
string pattern = @"[a-z]m$";//all texts first letter is letter from a to z and second letter is m

مثال استخدام matches

private void Test()
{
     string input = @"hi my name is mohammed iam from jeddah";
     string pattern = @"(\w)\1";//repeated letters mm in mohammed and dd in jeddah
     Regex reg = new Regex(pattern);
     foreach(Match match in reg.Matches(input))
     {
         print(match.Value);
     }
}

القوسين () grouping ليعامل ال pattern الذ بداخله على انه character واحد ويمكن الاشارة الى القوسين ب باك سلاش ثم ترتيب القوسين كما في الامثلة القادمة

مثال استخدام القوسين () والرقم المشير لهم

string input = @"aaaah11hh2h2";
string pattern = @"(\w)(\d)\2\1";//h11h

\w حروف فقط
\d ارقام فقط
\s ترمز الى كل فراغ
\W كل الرموز باستثناء الحروف
\D كل الرموز باستثناء الأرقام
\S كل الرموز باستثناء الفراغات

مثال | او

string input = @"this thamer that there";
string pattern = @"th(e|is|at)";//this in this , that in that , the in there

* يرمز الى تكرار العنصر السابق 0 مرة واكثر
+ يرمز الى تكرار العنصر السابق 1 مرة واكثر
؟ يرمز الى تكرار العنصر السابق 0 او 1 مرة
{n} يرمز الى تكرار العنصر عدد n مرات
{n,m} يرمز الى تكرار العنصر عدد n الى m مرات
{n,} على الاقل يتكرر العنصر n مرات
{,m} على الأكثر يتكرر العنصر m مرات



التصنيف : c#
كلمات مفتاحية :