对正则表达式感到困惑

时间:2009-09-10 09:39:01

标签: regex reluctant-quantifiers

我希望匹配表达式"${"中以"}"开头并以${foo} and ${bar}结尾的表达式。

当然,正则表达式.*\$\{.+\}.*匹配整个表达式。

我的理解是,改变不情愿的量词会解决问题,但我发现.*\$\{.+?\}.*也匹配整个表达式。

我错过了什么?

3 个答案:

答案 0 :(得分:3)

除了1800 INFORMATION的建议,我还会将点改为其他内容:

\$\{[^\}]+\}

如果您在字符串中出现两次+,则}将与${}匹配。

答案 1 :(得分:2)

我首先要删除表达式开头和结尾的.* - 这可能是匹配所有内容的。如果您尝试这样做有效吗?

\$\{.+\}

答案 2 :(得分:0)

“+”量词是贪婪的,所以它尽可能匹配,而+?匹配就足够了。

例如,对于“$ {foo} something $ {bar}”

“。+” - > match =“$ {foo} something $ {bar}” “+?” - > match =“$ {foo}”和“$ {bar}”。您将不得不迭代以获得所有匹配。

http://www.regular-expressions.info/repeat.html