التعبيرات النمطية في C# مع أمثلة: عمليًا

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التعبيرات النمطية في C# مع أمثلة: من النظرية إلى التطبيق

\n\n

التعبيرات النمطية (regex) هي أداة قوية للبحث عن النص واستخراجه واستبداله وفقًا لنمط معين. في لغة C# (.NET)، يتم التعامل مع التعبيرات النمطية من خلال مساحة الأسماء System.Text.RegularExpressions والفئة Regex. في هذه المقالة، سنستعرض الإمكانيات الأساسية من خلال أمثلة واقعية: من البحث البسيط إلى التحقق من صحة البريد الإلكتروني ورقم الهاتف.

\n\n

1. الأساسيات: فئة Regex وطرقها

\n\n

الفئة الرئيسية للعمل هي Regex. توفر طرقًا ثابتة وطرقًا خاصة بالكائن. إليك أهمها:

\n\n
    \n
  • IsMatch — تتحقق مما إذا كانت السلسلة تحتوي على تطابق مع النمط.
  • \n
  • Match — تجد أول تطابق.
  • \n
  • Matches — تجد جميع التطابقات.
  • \n
  • Replace — تستبدل التطابقات بسلسلة محددة.
  • \n
  • Split — تقسم السلسلة وفقًا للنمط.
  • \n
\n\n

مثال 1: فحص بسيط

\n
using System;\nusing System.Text.RegularExpressions;\n\nclass Program\n{\n    static void Main()\n    {\n        string text = "مرحبًا، رقمي: 123-456-7890";\n        string pattern = @"\\d{3}-\\d{3}-\\d{4}";\n\n        if (Regex.IsMatch(text, pattern))\n        {\n            Console.WriteLine("تم العثور على الرقم!");\n        }\n    }\n}\n
\n\n

في هذا المثال، \\d{3} تعني "ثلاثة أرقام بالضبط". يتم تخطي الشرطة المائلة العكسية باستخدام @ (سلسلة حرفية).

\n\n

2. مجموعات الالتقاط واستخراج البيانات

\n\n

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

\n\n

مثال 2: استخراج اسم المستخدم والنطاق من البريد الإلكتروني

\n
string email = "user@example.com";\nstring pattern = @"^(\\w+)@(\\w+\\.\\w+)$";\n\nMatch match = Regex.Match(email, pattern);\n\nif (match.Success)\n{\n    Console.WriteLine($"اسم المستخدم: {match.Groups[1].Value}");   // user\n    Console.WriteLine($"النطاق: {match.Groups[2].Value}");   // example.com\n}\n
\n\n

هنا، (\\w+) يلتقط حرفًا أبجديًا رقميًا واحدًا أو أكثر. ^ و $ هما مرساة بداية ونهاية السلسلة.

\n\n

مثال 3: تحليل URL

\n
string url = "https://pythonlib.ru/page?id=42";\nstring pattern = @"^(https?)://([^/]+)(/.*)?$";\n\nMatch m = Regex.Match(url, pattern);\nif (m.Success)\n{\n    Console.WriteLine($"البروتوكول: {m.Groups[1].Value}"); // https\n    Console.WriteLine($"النطاق: {m.Groups[2].Value}");    // pythonlib.ru\n    Console.WriteLine($"المسار: {m.Groups[3].Value}");     // /page?id=42\n}\n
\n\n

3. استبدال النص وحذفه

\n\n

تسمح طريقة Replace باستبدال الأجزاء التي تم العثور عليها. يمكن استخدام المراجع العكسية مثل $1، $2 لإدراج المجموعات.

\n\n

مثال 4: تنسيق رقم الهاتف

\n
string raw = "89161234567";\nstring pattern = @"(\\d{1})(\\d{3})(\\d{3})(\\d{2})(\\d{2})";\nstring replacement = "+7 ($2) $3-$4-$5";\n\nstring formatted = Regex.Replace(raw, pattern, replacement);\nConsole.WriteLine(formatted); // +7 (916) 123-45-67\n
\n\n

مثال 5: إزالة المسافات الزائدة

\n
string text = "هذا    نص   به    مسافات   زائدة.";\nstring cleaned = Regex.Replace(text, @"\\s+", " ");\nConsole.WriteLine(cleaned); // "هذا نص به مسافات زائدة."\n
\n\n

\\s+ — حرف مسافة بيضاء واحد أو أكثر. نستبدلها بمسافة واحدة.

\n\n

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

\n\n

عمليًا، تُستخدم التعبيرات النمطية غالبًا للتحقق من إدخال المستخدم. نقدم مثالين نموذجيين.

\n\n

التحقق من البريد الإلكتروني (مبسط)

\n
public static bool IsValidEmail(string email)\n{\n    if (string.IsNullOrWhiteSpace(email))\n        return false;\                

المدونات

توصيات الكتب