سؤال

أنا جديد في lex وأريد أن أحصل على جميع المطابقات الخاصة بالتعبير العادي

على سبيل المثال في النص التالي:

/* text text

text 
text

text */

text text
/* text text text text text text

text text */

أريد اختيار التطابقين بين /* و */

لكن ليكس يطابق المباراة الخارجية بأكملها ولا يعيد الاثنين!أستخدم هذا التعبير:

\/\*(.|\n)*\*\/

كيفية اختيار التطابقات الداخلية بدلاً من التطابقات الخارجية بأكملها؟شكرًا لك

هل كانت مفيدة؟

المحلول

\/\*([^*]|\n|\*+[^*/])*\*+\/

ما يحدث هو أن * جشع - سوف يتطابق مع أطول سلسلة ممكنة.يتعامل التعبير السابق مع الحرف * بشكل منفصل عن طريق التأكد من أن التعبير العادي يمكن أن يستمر فقط طالما أنه لا يتبعه الحرف /.يتم تحقيق ذلك من خلال جعل الوحدات الداخلية للتعبير العادي واحدة منها

  • شخصية ليست كذلك *
  • سطر جديد
  • سلسلة من *s متبوعة بحرف ليس /

في النهاية، هناك سلسلة من *s متبوعة بـ /.(ملحوظة:الإصدار السابق لم يتعامل مع هذه الحالة بشكل صحيح.أتمنى حقًا أن يكون لدى هذا المرن علامة *؟المشغل أو العامل.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top