Проблема при захвате текста между двумя буквами - PullRequest
3 голосов
/ 20 апреля 2011

Я использую следующее регулярное выражение для получения текста между /* и */:

(/\*)+(.+)(\*/)

это прекрасно работает, когда это нужно сделать только один раз, например, вся строка равна

/* hello */
it only needs to capture once

но если есть несколько раз, когда его нужно захватить, он захватывает то, что находится между, например:

/* hello */
it only needs to capture more than once [THIS ALSO GET'S HIGHLIGHTED]
/* second time */

Почему это происходит?

Ответы [ 2 ]

10 голосов
/ 20 апреля 2011

Потому что вы говорите это. По умолчанию регулярные выражения жадные , что означает, что они будут соответствовать как можно дольше.

В регулярном выражении Perl это поведение можно переопределить с помощью

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

'?' говорит '+', что соответствует самой короткой строке, которую он может, вместо самой длинной.

3 голосов
/ 20 апреля 2011

Похоже, вы используете жадное сопоставление между разделителями комментариев.Попробуйте вместо этого

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