التعبيرات المنتظمة في C#: أساسيات العمل مع فئة Regex
التعبيرات المنتظمة (regex) هي أداة قوية للبحث واستخراج واستبدال والتحقق من السلاسل النصية وفق نمط محدد. في C# (.NET) يتركز كل العمل مع التعبيرات المنتظمة في مساحة الأسماء System.Text.RegularExpressions والفئة المركزية Regex. في هذه المقالة سنشرح الإمكانيات الأساسية والمتقدمة للتعبيرات المنتظمة في C# من خلال أمثلة عملية.
1. فئة Regex: الطرق الأساسية وإنشاء الأنماط
للعمل مع التعبيرات المنتظمة في C# تحتاج إلى تضمين مساحة الأسماء:
using System.Text.RegularExpressions;توفر فئة Regex عدة طرق رئيسية:
- IsMatch — تتحقق مما إذا كانت السلسلة تحتوي على تطابق مع النمط.
- Match — تُرجع أول تطابق.
- Matches — تُرجع جميع التطابقات.
- Replace — تستبدل التطابقات التي تم العثور عليها بسلسلة محددة.
- Split — تقسم السلسلة بناءً على التطابقات.
مثال بسيط للتحقق من عنوان البريد الإلكتروني:
string email = "user@example.com";string pattern = @"^[\\w\\.-]+@[\\w\\.-]+\\.\\w+$";bool isValid = Regex.IsMatch(email, pattern);Console.WriteLine(isValid); // Trueلاحظ الرمز @ قبل السلسلة — هذه سلسلة حرفية (verbatim string) تسهل كتابة الخطوط المائلة العكسية (\\) في الأنماط.
2. البحث واستخراج البيانات: طريقتي Match و Matches
طريقة Match تُرجع كائن Match الذي يحتوي على معلومات حول أول تطابق. إذا لم تكن هناك تطابقات، ستكون الخاصية Success مساوية false.
مثال لاستخراج رقم هاتف من نص:
string text = "اتصل على الرقم +7 (123) 456-78-90 أو +7 (987) 654-32-10";string pattern = @"\\+7\\s?\\(\\d{3}\\)\\s?\\d{3}-\\d{2}-\\d{2}";MatchCollection matches = Regex.Matches(text, pattern);
foreach (Match match in matches){ Console.WriteLine(match.Value);}// الإخراج:// +7 (123) 456-78-90// +7 (987) 654-32-10طريقة Matches تُرجع مجموعة من جميع التطابقات. يمكنك أيضاً استخدام مجموعات الالتقاط لاستخراج أجزاء منفصلة:
string text = "المعرف: 12345, السعر: 999.99";string pattern = @"السعر:\\s*(\\d+\\.?\\d*)";Match match = Regex.Match(text, pattern);
if (match.Success){ string price = match.Groups[1].Value; Console.WriteLine($"السعر: {price}"); // السعر: 999.99}يتم تحديد مجموعات الالتقاط بواسطة الأقواس المستديرة () في النمط. المجموعة الصفرية هي التطابق بأكمله، والمجموعات من 1 إلى N هي السلاسل الفرعية الملتقطة.
3. استبدال وتقسيم السلاسل: Replace و Split
طريقة Replace تسمح باستبدال التطابقات بمرونة. وهي تدعم المراجع العكسية ($1, $2 إلخ) لإدراج المجموعات الملتقطة.
مثال لتنسيق التاريخ من "YYYY-MM-DD" إلى "DD.MM.YYYY":
string date = "2025-03-15";string pattern = @"(\\d{4})-(\\d{2})-(\\d{2})";string replacement = "$3.$2.$1";string result = Regex.Replace(date, pattern, replacement);Console.WriteLine(result); // 15.03.2025طريقة Split تقسم السلسلة بناءً على التطابقات مع النمط. هذا مفيد لتحليل ملفات CSV أو السجلات:
string data = "تفاحة;موز;كرز;عنب";string pattern = @";";string[] fruits = Regex.Split(data, pattern);foreach (var fruit in fruits){ Console.WriteLine(fruit);}// الإخراج:// تفاحة// موز// كرز// عنبيمكنك أيضاً استخدام فواصل أكثر تعقيداً، مثل عدة مسافات أو علامات ترقيم:
string text = "واحد اثنان,ثلاثة;أربعة";string[] parts = Regex.Split(