تعد المجموعات في التعبيرات العادية مفهومًا مهمًا جدًا، وهي جسرنا إلى تطبيقات التعبير العادي المتقدمة.
يمكن تقسيم نتيجة مطابقة التعبير العادي إلى أجزاء متعددة. هذا هو الغرض من المجموعة
.
بعد أن تتمكن من استخدام المجموعات بمرونة، ستجد أن Regex مريح وقوي حقًا.
لنأخذ مثالاً أولاً:
public static void Main()
{
سلسلة ق = "2005-2-21"؛
Regex reg = new Regex(@"(?<y>d{4})-(?<m>d{1,2})-(?<d>d{1,2})"،RegexOptions .مترجمة)؛
مطابقة المباراة = reg.Match(s);
int year = int.Parse(match.Groups["y"].Value);
int Month = int.Parse(match.Groups["m"].Value);
int day = int .Parse(match.Groups["d"].Value);
DateTime time = new DateTime(year,month,day);
Console.WriteLine(time);
Console.ReadLine();
}
يقوم المثال أعلاه بتحليل سلسلة من خلال المجموعات وتحويلها إلى مثيل DateTime. بالطبع، يمكن تنفيذ هذه الوظيفة بسهولة باستخدام أسلوب DateTime.Parse.
في هذا المثال، أستخدم (؟<name>) لتقسيم نتائج المطابقة إلى ثلاث مجموعات "y" و"m" و"d" تمثل السنة والشهر واليوم على التوالي.
الآن بعد أن أصبح لدينا مفهوم المجموعات، دعونا نلقي نظرة على كيفية تجميعها، الأمر بسيط للغاية، بالإضافة إلى الطريقة المذكورة أعلاه، يمكننا تعريف مجموعة بزوج من الأقواس. على سبيل المثال، يمكن تغيير المثال أعلاه إلى:
الفراغ العام الثابت الرئيسي ()
{
سلسلة ق = "2005-2-21"؛
Regex reg = new Regex(@"(d{4})-(d{1,2})-(d{1,2})"،RegexOptions.Compiled);
مطابقة المباراة = reg.Match(s);
int year = int.Parse(match.Groups[1].Value);
int Month = int.Parse(match.Groups[2].Value);
int day = int .Parse(match.Groups[3].Value);
DateTime time = new DateTime(year,month,day);
Console.WriteLine(time);
Console.ReadLine();
}
كما يتبين من المثال أعلاه، المجموعة المضمنة في زوج القوس الأول يتم ترقيمها تلقائيًا 1، ويتم ترقيم الأقواس التالية 2، 3...
public static void Main()
{
سلسلة ق = "2005-2-21"؛
Regex reg = new Regex(@"(?<2>d{4})-(?<1>d{1,2})-(?<3>d{1,2})"،خيارات Regex .مترجمة)؛
مطابقة المباراة = reg.Match(s);
int year = int.Parse(match.Groups[2].Value);
int Month = int.Parse(match.Groups[1].Value);
int day = int .Parse(match.Groups[3].Value);
DateTime time = new DateTime(year,month,day);
Console.WriteLine(time);
Console.ReadLine();
}
بالنظر
إلى المثال أعلاه مرة أخرى، نستخدم (؟<number>) لترقيم مجموعة كل زوج من الأقواس يدويًا (لاحظ أنني لم أحدد موضع 1 و2 من اليسار إلى اليمين).
نحن نعرف الطرق الثلاث لتحديد Group for Regex والطرق المقابلة للإشارة إلى نتائج مطابقة المجموعة.
بعد ذلك، فيما يتعلق بتعريف المجموعة، يرجى ملاحظة نقطتين إضافيتين:
1. نظرًا لاستخدام الأقواس لتعريف المجموعات، لذلك إذا كنت تريد مطابقة "(" و ")"، فيرجى استخدام "(" و")" (حول الكل خاص لتعريف الأحرف، يرجى مراجعة وثائق مساعدة تعبير Regex ذات الصلة).
2. إذا تم استخدام خيار ExplicitCapture عند تعريف Regex، فلن ينجح المثال الثاني، لأن هذا الخيار يتطلب مجموعة محددة بشكل صريح برقم أو اسم لالتقاط النتائج وحفظها إذا لم تقم بتحديد خيار ExplicitCapture، وفي بعض الأحيان إذا قمت بتعريف تعبير مشابه لـ (A|B)، ولا تريد التقاط نتيجة هذا (A|B)، فيمكنك استخدام بناء جملة "مجموعة غير ملتقطة"، والذي تم تعريفه كـ ( ?:) الطريقة بالنسبة لـ (A|B)، يمكنك تعريفها بهذا الشكل لتحقيق غرض عدم التقاطها وحفظها في مجموعة المجموعة - (?:A|B).