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