Вопрос

Я новичок в lex и хочу найти все совпадения, относящиеся к регулярному выражению

например, в следующем тексте:

/* text text

text 
text

text */

text text
/* text text text text text text

text text */

я хочу выбрать два совпадения между /* и */

но lex соответствует всему внешнему совпадению и не возвращает два!Я использую это выражение:

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

Как выбрать внутренние совпадения вместо всего внешнего?Спасибо

Это было полезно?

Решение

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

Происходит то, что * является жадным - он будет соответствовать как можно более длинной строке.Предыдущее выражение обрабатывает символ * отдельно, гарантируя, что регулярное выражение может продолжаться только до тех пор, пока за ним не следует символ /.Это достигается за счет того, что внутренние единицы регулярного выражения являются одними из

  • персонаж, которого нет *
  • новая строка
  • строка *s, за которой следует символ, отличный от /

В конце идет строка *s, за которой следует /.(Примечание:предыдущая версия не обрабатывала этот случай правильно.Мне бы очень хотелось, чтобы на гибком диске был *?оператор.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top