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

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

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

ابدأ الدورة

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



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



أساسيات العمل مع Regex في C#



توفر الفئة Regex ثلاث طرق رئيسية:

  • IsMatch — تتحقق مما إذا كانت السلسلة تطابق النمط؛
  • Match — تجد أول تطابق؛
  • Matches — تجد جميع التطابقات.


مثال بسيط — التحقق مما إذا كانت السلسلة تحتوي على أرقام:



using System;using System.Text.RegularExpressions;

public class RegexExample{ public static void Main() { string text = "رقمي: 12345"; string pattern = @"\\d+"; // رقم واحد أو أكثر

bool hasDigits = Regex.IsMatch(text, pattern); Console.WriteLine(hasDigits); // True }}


لاحظ استخدام @ قبل السلسلة — هذا هو verbatim string literal الذي يعطل هروب الشرطة المائلة العكسية. بدونه كان يجب كتابة "\\\\d+".



التحقق من البريد الإلكتروني ورقم الهاتف



التحقق من صحة البريد الإلكتروني

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



public static bool IsValidEmail(string email){    string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";    return Regex.IsMatch(email, pattern);}

// الاستخدامConsole.WriteLine(IsValidEmail("user@example.com")); // TrueConsole.WriteLine(IsValidEmail("user@.com")); // False


تحليل النمط:

  • ^ — بداية السلسلة؛
  • [a-zA-Z0-9._%+-]+ — الجزء المحلي (حروف، أرقام ورموز خاصة)؛
  • @ — رمز "أرنب"؛
  • [a-zA-Z0-9.-]+ — النطاق؛
  • \\. — نقطة (مفلترة)؛
  • [a-zA-Z]{2,} — منطقة النطاق (حرفان على الأقل)؛
  • $ — نهاية السلسلة.


التحقق من رقم الهاتف

مثال للتنسيق الروسي (+7 XXX XXX-XX-XX):



public static bool IsValidRussianPhone(string phone){    string pattern = @"^\\+7\\d{3}\\d{3}-\\d{2}-\\d{2}$";    // أو خيار أكثر مرونة:    // @"^\\+7[\\s-]?\\d{3}[\\s-]?\\d{3}[\\s-]?\\d{2}[\\s-]?\\d{2}$"    return Regex.IsMatch(phone, pattern);}


استخراج البيانات من النص باستخدام مجموعات الالتقاط



مجموعات الالتقاط (الأقواس ()) تسمح باستخراج أجزاء من التطابق. على سبيل المثال، استخراج جميع عناوين البريد الإلكتروني من النص:



string text = "جهات الاتصال: support@site.com, admin@test.org, info@company.net";string pattern = @"([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+)\\.([a-zA-Z]{2,})";

MatchCollection matches = Regex.Matches(text, pattern);foreach (Match match in matches){ Console.WriteLine($"البريد الإلكتروني الكامل: {match.Value}"); Console.WriteLine($"الجزء المحلي: {match.Groups[1].Value}"); Console.WriteLine($"النطاق: {match.Groups[2].Value}"); Console.WriteLine($"المنطقة: {match.Groups[3].Value}"); Console.WriteLine("---");}


النتيجة:

البريد الإلكتروني الكامل: support@site.comالجزء المحلي: supportالنطاق: siteالمنطقة: com---


يتم ترقيم المجموعات بدءاً من 1 (المجموعة 0 هي التطابق الكامل). يمكن إعطاؤها أسماء:



string pattern = @"(?<user>[a-zA-Z0-9._%+-]+)@(?<domain>[a-zA-Z0-9.-]+)\\.(?<tld>[a-zA-Z]{2,})";// الوصول: match.Groups["user"].Value


استخراج الروابط من HTML



string html = @"<a href='https://example.com'>Examp                

المدونات

توصيات الكتب