Intro

  • ما هو Regex؟
    الـRegex هي اختصار لـ “Regular Expression”، وتعبر عن (pattern) يستخدم لتحديد سلسلة من الأحرف تتبع نمط محدد.

  • استخداماته

    • التحقق من تنسيق البيانات (مثلاً التحقق من صحة البريد الإلكتروني أو رقم الهاتف).
    • استخراج بيانات معينة من نص معقد.
    • استبدال أو تعديل أجزاء من النص.
    • تقسيم النصوص باستخدام حدود معينة.

2. الأساسيات

  • In Name space:
    System.Text.RegularExpressions.

  • Main Classes:

    • الـRegex: الـ Class الأساسي للتعامل مع Patterns.
    • الـMatch و MatchCollection: لتمثيل ومجموعات النتائج المطابقة.
  • البنية الأساسية لـ Regex Pattern:

    • يمكن أن يحتوي على (Literal characters) مثل abc.
    • يمكن أن يحتوي على رموز خاصة (Metacharacters) مثل .، *، +، ?، ^، $ وغيرها.
    • أمثلة:
      • الـ\d يعبر عن حرف رقمي (digit).
      • الـ\w يعبر عن حرف (word character).
      • الـ[A-Za-z] يحدد مجموعة حروف.

3. استخدام Regex في C#

3.1. التحقق من النمط (IsMatch)

يستخدم للتحقق مما إذا كانت السلسلة تتبع النمط المحدد.

string input = "example@example.com";
string pattern = @"^[^@\s]+@[^@\s]+\.[^@\s]+$";
 
bool isEmail = Regex.IsMatch(input, pattern);
Console.WriteLine(isEmail); // true إذا كان البريد الإلكتروني صالحًا

3.2. استخراج المطابقات (Match, Matches)

يمكنك استخراج أول مطابقة أو جميع المطابقات الموجودة في النص.

string text = "My phone number is 123-456-7890.";
string phonePattern = @"\d{3}-\d{3}-\d{4}";
 
Match match = Regex.Match(text, phonePattern);
if(match.Success)
{
    Console.WriteLine("Phone number found: " + match.Value);
}

3.3. الاستبدال (Replace)

تستبدل أجزاء من النص بناءً على النمط المحدد.

string sentence = "The price is 100 dollars.";
string pattern = @"\d+";
string replaced = Regex.Replace(sentence, pattern, "200");
Console.WriteLine(replaced);  // The price is 200 dollars.

3.4. تقسيم النص (Split)

يمكن تقسيم النص إلى مصفوفة بناءً على نمط معين.

string data = "apple,banana;cherry orange";
string pattern = @"[,\s;]+";
string[] fruits = Regex.Split(data, pattern);
foreach(var fruit in fruits)
{
    Console.WriteLine(fruit);
}

4. خيارات Regex (RegexOptions)

يمكن تمرير خيارات لتعديل سلوك المطابقة، مثل:

  • RegexOptions.IgnoreCase: تجاهل حالة الأحرف.
  • RegexOptions.Multiline: التعامل مع الأسطر المتعددة.
  • RegexOptions.Compiled: لتحسين الأداء عند استخدام النمط مرات عديدة.

مثال استخدام خيارات:

string pattern = @"abc";
string text = "ABC";
bool matchFound = Regex.IsMatch(text, pattern, RegexOptions.IgnoreCase);
Console.WriteLine(matchFound); // true

5. نصائح عملية

  • اختبر Pattern بتاعك باستخدام أدوات خارجية:
    يوجد العديد من الأدوات مثل Regex101 لتجربة تعابير نمطية وتصحيحها.

  • استخدم التعليقات في النمط:
    يمكنك استخدام نمط موسع Complex Patterns مع خيارات مثل RegexOptions.IgnorePatternWhitespace لتوضيح النمط وتضمين تعليقات.

  • احذر من Overuse:
    التعابير النمطية قوية لكن ممكن تكون معقدة وتؤدي الى صعوبة في الصيانة إذا تمت إساءة استخدامها.