我想匹配一个有这个的字符串${anything-here}
例如在这种情况下:
outside${parameter1}outside${parameter2}
正则表达式必须匹配:
${parameter1}
作为第一个匹配
${parameter2}
作为第二个匹配
我试过这个:
\$\{.*}
但它匹配:
${parameter1}outside${parameter2}
因为我不知道在字符之后如何完成比赛}
。
我怎样才能做到这一点?
让它不贪婪:
\${.*?}
或者更好地使用否定:
\${[^}]*}
在这个演示中,您可以看到它是匹配的${parameter1}
并且${parameter2}
PS:正如@Tim 在下面评论的那样,它最好逃避{
,因为一些正则表达式引擎可能会抛出错误。所以最好使用:
\${[^\}]*}
如果要在花括号内捕获这些匹配文本,则可以使用如下捕获组:
\${([^\}]*)}
只是让它变得懒惰。它将尽可能少地匹配。
\$\{.*?\}
来自 python 的示例:
>>> import re
>>> s = "outside${parameter1}outside${parameter2}"
>>> regex = r'\$\{.*?\}'
>>> re.findall(regex, s)
['${parameter1}', '${parameter2}']
.*
会匹配到最后一个可能的模式。在你的情况下,它会吃掉最后一个}
。所以,它是贪婪的
.*?
会尽可能少地匹配。换句话说,它是懒惰的
所以,你有三种方法可以做到这一点
[$][{].*?[}]
[$][{][^}][}]
[$][{]\w+[}]