مطابقة الأقواس المتداخلة بدون التكرار أو مجموعات الموازنة
قد تكون مطابقة الأقواس المتداخلة باستخدام التعبيرات العادية أمرًا صعبًا، خاصة في لغات مثل Java، حيث التكرار ومجموعات الموازنة غير مدعومة. لحسن الحظ، من الممكن بالفعل التغلب على هذا القيد باستخدام المراجع الأمامية.
مطابقة المجموعات الخارجية
يطابق التعبير العادي التالي [1] المجموعات الخارجية من بين قوسين دون فرض حدود على العمق:
(?=\()(?:(?=.*?\((?!.*?\1)(.*\)(?!.*\2).*))(?=.*?\)(?!.*?\2)(.*)).) ?.*?(?=\1)[^(]*(?=\2$)
هنا، يتطلع التعبير إلى فتح الأقواس، باستثناء أقواس الفتح غير المتطابقة، ويلتقط أقواس الإغلاق المقابلة. تعمل السلاسل الفرعية الملتقطة، على الرغم من عدم جدواها، كعناصر نائبة لإكمال المطابقة. ]
مطابقة المجموعات الداخليةلتضمين المجموعات الداخلية، يمكننا التقاط التعبير التالي
[2]:(?=\()( ?=((?:(?=.*?\((؟!.*?\2)(.*\)(؟!.*\3).*))(?=.*?\)(? !.*?\3)(.*)).) ?.*?(?=\2)[^(]*(?=\3$)))
(?=\()(?=((?:(?=.*?\((?!.*?\2)(.*\)(?!.*\3).*))(?=.*?\)(?!.*?\3)(.*)).) ?.*?(?=\2)[^(]*(?=\3$)))
كيف يعمل
تتكرر الطريقة عبر السلسلة، ومطابقة قوسي الفتح والإغلاق التاليين أثناء التقاط السلسلة المتبقية في كل حالة. تضمن رؤوس البحث تطابق الأقواس بطريقة متوازنة.
يتم إنشاء التعبير على النحو التالي:
الوصف | |
---|---|
يؤكد أن '(' يسبق التحليل المعقد | |
بدء مجموعة غير ملتقطة لمعالجة السلسلة المتكررة | (?= |
. | |
المطابقة حتى '(' التالية غير متبوعة بالمجموعة 1 | (. |
املأ المجموعة 1 بالسلسلة، مع التأكد من وجود ')' آخر | ) |
. | |
تأكد من أن ')' التالية غير متبوعة بالمجموعة 2 موجودة | (.*) |
) | |
) ? | |
.*?(?=\ 1) | |
*(?=\2 $)المطابقة حتى آخر ')' (ولكن ضمن المجموعة الصالحة) | تسمح هذه الطريقة بالمطابقة الفعالة للأقواس المتداخلة دون الحاجة للتكرار أو موازنة المجموعات. |
(
↩تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3