как выбрать внутренние совпадения в lex
-
03-07-2019 - |
Вопрос
Я новичок в lex и хочу найти все совпадения, относящиеся к регулярному выражению
например, в следующем тексте:
/* text text
text
text
text */
text text
/* text text text text text text
text text */
я хочу выбрать два совпадения между /* и */
но lex соответствует всему внешнему совпадению и не возвращает два!Я использую это выражение:
\/\*(.|\n)*\*\/
Как выбрать внутренние совпадения вместо всего внешнего?Спасибо
Решение
\/\*([^*]|\n|\*+[^*/])*\*+\/
Происходит то, что * является жадным - он будет соответствовать как можно более длинной строке.Предыдущее выражение обрабатывает символ * отдельно, гарантируя, что регулярное выражение может продолжаться только до тех пор, пока за ним не следует символ /.Это достигается за счет того, что внутренние единицы регулярного выражения являются одними из
- персонаж, которого нет *
- новая строка
- строка *s, за которой следует символ, отличный от /
В конце идет строка *s, за которой следует /.(Примечание:предыдущая версия не обрабатывала этот случай правильно.Мне бы очень хотелось, чтобы на гибком диске был *?оператор.)