يشير المرجع الخلفي إلى إحالة المجموعة المطابقة إلى أماكن أخرى في التعبير نفسه، على سبيل المثال، عند مطابقة علامات HTML، نقوم بمطابقة <a>، ونحتاج إلى اقتباس a المطابق للعثور على </a>، هذه المرة تحتاج. لاستخدام المرجع الخلفي.
بناء الجملة
أ. للإشارة إلى مجموعة مرقمة، يكون بناء الجملة هو number
b. للإشارة إلى مجموعة مسماة، يكون بناء الجملة k<name>
مثال
أ. مطابقة علامات HTML المقترنة
@"<(?<tag>[^ s>]+)[^>]*>.*</k<tag>>"
ب. مطابقة حرفين متداخلين
public static void Main()
{
السلسلة s = "aabbc11asd";
Regex reg = new Regex(@"(w)1");
MatchCollection match = reg.Matches(s);
foreach (تطابق m في المباريات)
Console.WriteLine(m.Value);
Console.ReadLine();
}
نتيجة الإرجاع هي
مجموعة مطابقة مساعدة
aa bb 11تتبع عدة هياكل جماعية، ولن يتم حفظ النمط الموجود بين قوسين كجزء من نتيجة المطابقة
1.
معنى العبارة الإيجابية (؟ =): يجب أن يكون النمط الموجود بين قوسين تظهر على الجانب الأيمن من العبارة، ولكن ليس كجزء من المطابقة
public static void Main()
{
string s = "C#.net,VB.net,PHP,Java,JScript.net";
Regex reg = new Regex(@"[w#]+(?=.net)"،RegexOptions.Compiled);
MatchCollection mc = reg.Matches(s);
foreach (تطابق m في mc)
Console.WriteLine(m.Value);
Console.ReadLine();
//الإخراج C# VB JScript
}
يمكنك أن ترى أن محرك المطابقة يتطلب مطابقة .net، لكنه لا يضع .net في نتائج المطابقة
2. التصريح السلبي (؟!)
يعني: يجب ألا يظهر النمط الموجود بين قوسين على الجانب الأيمن من
التصريح يوضح المثال التالي كيفية الحصول على < a>كل المحتوى في زوج العلامات، حتى لو كان يحتوي على علامات HTML أخرى.
الفراغ العام الثابت الرئيسي ()
{
string newsContent = @"url:<a href=""1.html""><img src=""1.gif"">test<span style=""color:red;"">Regex</span> </أ>.";
Regex regEnd = new Regex(@"<s*a[^>]*>([^<]|<(؟!/a))*<s*/as*>",RegexOptions.Multiline) ;
Console.WriteLine(regEnd.Match(newsContent).Value);
// النتيجة: <a href="1.html"><img src="1.gif">test<span style="color:red;">Regex</span></a>
Console.ReadLine();
}
3.
معنى التصريح الإيجابي العكسي (?<=): يجب أن يظهر النمط بين القوسين على الجانب الأيسر من الإقرار، ولكن ليس كجزء من المطابقة
4. معنى التصريح السلبي العكسي (؟<!)
: يجب ألا يظهر النمط الموجود بين قوسين. بناء الجملة
المطابق غير التراجعي
يظهر على الجانب الأيسر من العبارة: (؟>)
المعنى: بعد مطابقة هذه المجموعة، لا يمكن استخدام الأحرف المطابقة لمطابقة التعبيرات اللاحقة من خلال التراجع. هههه بالتأكيد لن أفهم ذلك بمجرد قراءة هذه الجملة، لقد أمضيت الكثير من الوقت في محاولة فهم ذلك، لذلك دعونا نوضح ذلك من خلال مثال:
يمكن مطابقة " www.csdn.net " بواسطة @"w+.(.*).w+"، ولكن لا يمكن مطابقته بواسطة @"w+.(?>.*).w+"! لماذا؟
والسبب هو أن المطابقة العادية جشعة. عند المطابقة، ستتطابق مع أكبر عدد ممكن من النتائج. لذلك، سيتطابق .* في التعبيرين العاديين في المثال أعلاه تمامًا مع csdn.net عندما يبدأ في المطابقة، يجد أن .w+ ليس لديه أحرف لمطابقتها، لذلك سوف يتراجع، ما يسمى بالتراجع هو إرجاع نتيجة المطابقة .*، ويتم استخدام الأحرف المتبقية من التراجع للمطابقة. .w+ ، حتى يتطابق .w+ بنجاح، يُرجع التعبير بأكمله نتيجة مطابقة ناجحة. يستخدم التعبير الثاني المطابقة غير التراجعية، لذلك بعد مطابقة .*، لا يُسمح بمطابقة .w+ من خلال التراجع، لذلك يفشل التعبير بأكمله في المطابقة.
يرجى ملاحظة أن التراجع هو مضيعة للموارد، لذا يرجى محاولة تجنب الاضطرار إلى التراجع لمطابقة تعبيرك العادي بنجاح، كما في المثال أعلاه، يمكنك استبداله بـ @"w+.([^.]+ ). .)+w+"+".