关于正则表达式的疑问

关于正则表达式的疑问

问题描述:

我想匹配表达式,该表达式以"${"开头,"}"结尾的表达式为${foo} and ${bar}关于正则表达式的疑问

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

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

我错过了什么?

除了到1800年信息,我会点更改为其他内容的建议:

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

由于+将匹配一样,因为它甚至可以在}如果你有两个occurances ${}在字符串中。

我会从开始和结束时删除.*开始 - 这可能是匹配所有内容。如果你试试这个,它会起作用吗?

\$\{.+\} 
+0

rememebr是potenetially。*匹配空字符串,你可以在任何地方找到一个空字符串:)(这完全取决于无正则表达式引擎使用) – Pod 2009-09-10 11:07:55

“+”量词是贪婪的,所以它匹配尽可能多,而+?,恰好匹配。

例如,对于 “$ {} foo的东西$ {}吧”

“+” - >匹配= “$ {} foo的东西$ {}吧” “+?” - > match =“$ {foo}”和“$ {bar}”。你将不得不迭代来获得所有的匹配。

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

+0

这就是我以前的理解。我的困惑是为什么“。+?”尽可能少地匹配。 – 2009-09-10 12:42:09