كيفية اختيار التطابقات الداخلية في ليكس
-
03-07-2019 - |
سؤال
أنا جديد في lex وأريد أن أحصل على جميع المطابقات الخاصة بالتعبير العادي
على سبيل المثال في النص التالي:
/* text text
text
text
text */
text text
/* text text text text text text
text text */
أريد اختيار التطابقين بين /* و */
لكن ليكس يطابق المباراة الخارجية بأكملها ولا يعيد الاثنين!أستخدم هذا التعبير:
\/\*(.|\n)*\*\/
كيفية اختيار التطابقات الداخلية بدلاً من التطابقات الخارجية بأكملها؟شكرًا لك
المحلول
\/\*([^*]|\n|\*+[^*/])*\*+\/
ما يحدث هو أن * جشع - سوف يتطابق مع أطول سلسلة ممكنة.يتعامل التعبير السابق مع الحرف * بشكل منفصل عن طريق التأكد من أن التعبير العادي يمكن أن يستمر فقط طالما أنه لا يتبعه الحرف /.يتم تحقيق ذلك من خلال جعل الوحدات الداخلية للتعبير العادي واحدة منها
- شخصية ليست كذلك *
- سطر جديد
- سلسلة من *s متبوعة بحرف ليس /
في النهاية، هناك سلسلة من *s متبوعة بـ /.(ملحوظة:الإصدار السابق لم يتعامل مع هذه الحالة بشكل صحيح.أتمنى حقًا أن يكون لدى هذا المرن علامة *؟المشغل أو العامل.)
لا تنتمي إلى StackOverflow