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]
يحدد مجموعة حروف.
- الـ
- يمكن أن يحتوي على (Literal characters) مثل
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:
التعابير النمطية قوية لكن ممكن تكون معقدة وتؤدي الى صعوبة في الصيانة إذا تمت إساءة استخدامها.