"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل يمكن مطابقة الأقواس المتداخلة بدون مجموعات التكرار أو الموازنة؟

هل يمكن مطابقة الأقواس المتداخلة بدون مجموعات التكرار أو الموازنة؟

تم النشر بتاريخ 2024-11-06
تصفح:956

Can Nested Brackets Be Matched Without Recursion or Balancing Groups?

مطابقة الأقواس المتداخلة بدون التكرار أو مجموعات الموازنة

قد تكون مطابقة الأقواس المتداخلة باستخدام التعبيرات العادية أمرًا صعبًا، خاصة في لغات مثل Java، حيث التكرار ومجموعات الموازنة غير مدعومة. لحسن الحظ، من الممكن بالفعل التغلب على هذا القيد باستخدام المراجع الأمامية.

مطابقة المجموعات الخارجية

يطابق التعبير العادي التالي [1] المجموعات الخارجية من بين قوسين دون فرض حدود على العمق:

(?=\()(?:(?=.*?\((?!.*?\1)(.*\)(?!.*\2).*))(?=.*?\)(?!.*?\2)(.*)).) ?.*?(?=\1)[^(]*(?=\2$)

هنا، يتطلع التعبير إلى فتح الأقواس، باستثناء أقواس الفتح غير المتطابقة، ويلتقط أقواس الإغلاق المقابلة. تعمل السلاسل الفرعية الملتقطة، على الرغم من عدم جدواها، كعناصر نائبة لإكمال المطابقة. ]

مطابقة المجموعات الداخلية

لتضمين المجموعات الداخلية، يمكننا التقاط التعبير التالي

[2]

:(?=\()( ?=((?:(?=.*?\((؟!.*?\2)(.*\)(؟!.*\3).*))(?=.*?\)(? !.*?\3)(.*)).) ?.*?(?=\2)[^(]*(?=\3$)))

(?=\()(?=((?:(?=.*?\((?!.*?\2)(.*\)(?!.*\3).*))(?=.*?\)(?!.*?\3)(.*)).) ?.*?(?=\2)[^(]*(?=\3$))) 

كيف يعمل

تتكرر الطريقة عبر السلسلة، ومطابقة قوسي الفتح والإغلاق التاليين أثناء التقاط السلسلة المتبقية في كل حالة. تضمن رؤوس البحث تطابق الأقواس بطريقة متوازنة.

يتم إنشاء التعبير على النحو التالي:

المكون(?=()(?: (?=تأكد أن '(' التالية تتبع.?(؟!.?\1)(.)(؟!.\2).*)تأكد من صحة المطابقة ')'.?)(؟!.?\2)(.*)املأ المجموعة 2 بالسلسلة المتبقية)تأكد من صحة المطابقة ')'استخدم حرفًا واحدًا لمواصلة المطابقة داخل المجموعة) ?كرر المجموعة (في الحلقة الداخلية).*?(?=\ 1)مطابقة وتضمين آخر '(' تم العثور عليه1تسمح هذه الطريقة بالمطابقة الفعالة للأقواس المتداخلة دون الحاجة للتكرار أو موازنة المجموعات.
الوصف
يؤكد أن '(' يسبق التحليل المعقد
بدء مجموعة غير ملتقطة لمعالجة السلسلة المتكررة
المطابقة حتى '(' التالية غير متبوعة بالمجموعة 1
املأ المجموعة 1 بالسلسلة، مع التأكد من وجود ')' آخر
تأكد من أن ')' التالية غير متبوعة بالمجموعة 2 موجودة
*(?=\2 $)المطابقة حتى آخر ')' (ولكن ضمن المجموعة الصالحة)

(


بيان الافراج أعيد طبع هذه المقالة على الرقم: 1729740015 في حالة وجود أي مخالفة، يرجى التواصل مع [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3