匹配 ${.*} 的正则表达式

fra*_*edo 5 regex testing match

我想匹配一个有这个的字符串${anything-here}

例如在本例中:

outside${parameter1}outside${parameter2}
Run Code Online (Sandbox Code Playgroud)

正则表达式必须匹配:
${parameter1}作为第一个匹配
${parameter2}作为第二个匹配

我试过这个:

\$\{.*}
Run Code Online (Sandbox Code Playgroud)

但它匹配:

${parameter1}outside${parameter2}
Run Code Online (Sandbox Code Playgroud)

因为我不知道角色之后如何结束比赛}

我怎样才能做到这一点?

anu*_*ava 6

使其非贪婪:

\${.*?}
Run Code Online (Sandbox Code Playgroud)

或者更好地使用否定:

\${[^}]*}
Run Code Online (Sandbox Code Playgroud)

现场演示: http://www.rubular.com/r/MvmUpTC2n8

在此演示中,您可以看到它是匹配的${parameter1}并且${parameter2}

PS:正如@Tim 在下面评论的那样,最好逃避,{因为某些正则表达式引擎可能会抛出错误。所以最好使用:

\${[^\}]*}
Run Code Online (Sandbox Code Playgroud)

如果您想捕获大括号内的这些匹配文本,则可以使用捕获组,如下所示:

\${([^\}]*)}
Run Code Online (Sandbox Code Playgroud)