正则表达式匹配$ {。*}

时间:2013-05-27 15:34:59

标签: regex testing match

我想匹配具有此${anything-here}

的字符串

例如在这种情况下:

outside${parameter1}outside${parameter2}

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

我试过了:

\$\{.*}

但它匹配:

${parameter1}outside${parameter2}

因为我不知道如何在角色}之后完成比赛。

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:4)

让它变得非贪婪:

\${.*?}

或者更好地使用否定:

\${[^}]*}

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

在此演示中,您可以看到它与${parameter1}${parameter2}

相匹配

PS:正如@Tim在下面评论的那样,它更好地逃脱{,因为一些正则表达式引擎会抛出错误。所以更好用:

\${[^\}]*}

如果你想在大括号内捕获这些匹配的文本,那么你可以使用这样的捕获组:

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

答案 1 :(得分:1)

只是让它变得懒惰。它会尽可能少地匹配。

 \$\{.*?\}

来自python的示例:

>>> import re
>>> s = "outside${parameter1}outside${parameter2}"
>>> regex = r'\$\{.*?\}'
>>> re.findall(regex, s)
['${parameter1}', '${parameter2}']

答案 2 :(得分:0)

您可能希望将参数捕获到一个组中,如下所示:

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

Regular expression image

Edit live on Debuggex

答案 3 :(得分:0)

.*将匹配到最后一个可能的模式。在你的情况下,它会吃掉所有内容直到最后}。所以,它是贪心

.*?会尽可能少地匹配。换句话说,它是懒惰

所以,你有三种方法可以做到这一点

[$][{].*?[}]

[$][{][^}][}]

[$][{]\w+[}]