2009-09-10 84 views
0

我想匹配表達式,該表達式以"${"開頭,"}"結尾的表達式爲${foo} and ${bar}關於正則表達式的疑問

正則表達式.*\$\{.+\}.*當然匹配整個表達式。

我的理解是,更改爲不情願的量詞可以解決問題,但我發現.*\$\{.+?\}.*也匹配整個表達式。

我錯過了什麼?

回答

3

除了到1800年信息,我會點更改爲其他內容的建議:

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

由於+將匹配一樣,因爲它甚至可以在}如果你有兩個occurances ${}在字符串中。

2

我會從開始和結束時刪除.*開始 - 這可能是匹配所有內容。如果你試試這個,它會起作用嗎?

\$\{.+\} 
+0

rememebr是potenetially。*匹配空字符串,你可以在任何地方找到一個空字符串:)(這完全取決於無正則表達式引擎使用) – Pod 2009-09-10 11:07:55

0

「+」量詞是貪婪的,所以它匹配儘可能多,而+?,恰好匹配。

例如,對於 「$ {} foo的東西$ {}吧」

「+」 - >匹配= 「$ {} foo的東西$ {}吧」 「+?」 - > match =「$ {foo}」和「$ {bar}」。你將不得不迭代來獲得所有的匹配。

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

+0

這就是我以前的理解。我的困惑是爲什麼「。+?」儘可能少地匹配。 – 2009-09-10 12:42:09