Поиск содержимого между несколькими начальными и конечными тегами с помощью регулярного выражения - PullRequest
1 голос
/ 27 марта 2012

Я пытаюсь запустить регулярное выражение (Ruby) для файла, содержащего код и пользовательские теги комментариев.Я хочу найти весь текст между (/*+ ... +*/), одной строкой или многострочным.

Учитывая:

/*+
   # Testing Documentation #
   ## Another Documentation Line ##
   This is also picked up
+*/
Some code here that is ignored
/*+ # More documentation # +*/

Я бы хотел сопоставить каждую группу текста между открытием и закрытием/*+ ... +*/

Я попробовал следующий reg ex, который прекрасно работает для примера с одной строкой.Но если я включаю многострочную опцию, она выбирает все между первым и последним совпадением вместо сопоставления двух или более групп.

/(?<=\/\*\+)(.*)(?=\+\*\/)/

Спасибо

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

Сделать совпадение посередине не жадным ((.*?)). Вот постоянная ссылка на Rubular:

http://rubular.com/r/0SuNNJ3vy6

Выражение, которое я использовал, было /(\/\*\+)(.*?)(\+\*\/)/m, точно настроенное, как вы считаете нужным.

text.scan(/(\/\*\+)(.*?)(\+\*\/)/m).map(&:join)
#=> ["/*+\n   # Testing Documentation #\n   ## Another Documentation Line ##\n   This is also picked up\n+*/", "/*+ # More documentation # +*/"]
0 голосов
/ 27 марта 2012

Может быть, это поможет вам. Это работает в JS:

/(?:\/\*\+)([\w\W]*?)(?=\+\*\/)/igm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...