3

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

例如在这种情况下:

outside${parameter1}outside${parameter2}

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

我试过这个:

\$\{.*}

但它匹配:

${parameter1}outside${parameter2}

因为我不知道在字符之后如何完成比赛}

我怎样才能做到这一点?

4

4 回答 4

4

让它不贪婪:

\${.*?}

或者更好地使用否定:

\${[^}]*}

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

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

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

\${[^\}]*}

如果要在花括号内捕获这些匹配文本,则可以使用如下捕获组:

\${([^\}]*)}
于 2013-05-27T15:38:17.163 回答
1

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

 \$\{.*?\}

来自 python 的示例:

>>> import re
>>> s = "outside${parameter1}outside${parameter2}"
>>> regex = r'\$\{.*?\}'
>>> re.findall(regex, s)
['${parameter1}', '${parameter2}']
于 2013-05-27T15:37:29.447 回答
0

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

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

正则表达式图片

在 Debuggex 上实时编辑

于 2013-05-27T15:43:46.237 回答
0

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

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

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

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

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

[$][{]\w+[}]
于 2013-05-27T15:49:59.433 回答