Смущенный по поводу регулярного выражения - PullRequest
0 голосов
/ 10 сентября 2009

Я хочу сопоставить выражения, которые начинаются с "${" и заканчиваются "}" в выражении ${foo} and ${bar}.

Регулярное выражение .*\$\{.+\}.*, конечно, соответствует всему выражению.

Насколько я понимаю, переход на квантификатор с неохотой решит проблему, но я считаю, что .*\$\{.+?\}.* также соответствует всему выражению.

Чего мне не хватает?

Ответы [ 3 ]

3 голосов
/ 10 сентября 2009

Как и предложение от 1800 ИНФОРМАЦИЯ, я бы изменил точку на что-то другое:

\$\{[^\}]+\}

Поскольку + будет совпадать настолько, насколько это возможно, даже }, если у вас есть два вхождения ${} в строке.

2 голосов
/ 10 сентября 2009

Я бы начал с удаления .* в начале и в конце выражения - вероятно, это то, что соответствует всему. Если вы попробуете это, это работает?

\$\{.+\}
0 голосов
/ 10 сентября 2009

Квантор "+" является жадным, поэтому он соответствует столько, сколько может, в то время как +? Соответствует только.

Например, для "$ {foo} что-то $ {bar}"

". +" -> match = "$ {foo} что-то $ {bar}" "+?" -> match = "$ {foo}" и "$ {bar}". Вам нужно будет повторить, чтобы получить все совпадения.

http://www.regular -expressions.info / repeat.html

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