Regex для извлечения содержимого токена $ (xxx) в строку - PullRequest
1 голос
/ 03 января 2012

У меня есть строка с несколькими токенами-заполнителями, например:

"hello $(firstname) $(lastname), you're on StackOverflow!";

Simples :) Я пытаюсь написать регулярное выражение, которое будет смотреть на строку, подобную приведенной выше, и возвращать все существующие токены. Например, в этом случае возвращаемое значение должно быть { "firstname", "lastname" }.

Я новичок в Regex, вот что я пытался написать:

"\$\(.+?\)"

Однако совпадения включают $ и скобки, например: { "$(firstname)", "$(lastname)" }

Как я могу изменить регулярное выражение, чтобы оно возвращало только текст в скобках? Я посмотрел на этот вопрос в качестве руководства, но не могу понять, как это регулярное выражение работает иначе, чем мое.

Ответы [ 4 ]

1 голос
/ 03 января 2012

без группировки:

'(?<=\$\()[^)]+(?=\))'

тест с grep:

kent$  grep -Po '(?<=\$\()[^)]+(?=\))' v 
firstname
lastname

или посмотреть его вживую здесь: http://regexr.com? 2vke8

1 голос
/ 03 января 2012

Попробуйте изменить свое регулярное выражение на:

"\$\((.+?)\)"

В неэкранированных скобках должно быть указано, что вы хотите сопоставить.

0 голосов
/ 03 января 2012

используйте:

"\$\((?'val'.+?)\)"

и добавьте флаг RegexOptions.ExplicitCapture

0 голосов
/ 03 января 2012

Попробуйте что-то вроде этого:

\$\(([^\)]*)

На каком языке вы пытаетесь использовать?

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