2011-07-18 53 views
7

我想匹配一個字符串中雙括號內的所有內容。我使用下面的表達式:Java正則表達式匹配{{雙重大括號內的字符}}

\{\{.*\}\} 

一些例子:

The {{dog}} is not a cat.這正確匹配{{狗}}

然而,
The {{dog}} is a {{cat}}匹配後的首場比賽的一切,而不是返回兩場比賽。我希望它匹配兩次,一次{{dog}},一次{{cat}}

有誰知道如何做到這一點?

謝謝。

+1

正則表達式使用貪婪算法(因此想抓住一個字符串來匹配)。這有幫助還是你需要更多? – rajah9

+0

這應該做的工作\ {\。*?\} \} – DaMainBoss

+0

如果你收到你的答案接受最幫你的那個 – RMT

回答

7

貪婪.*匹配任何內容(除換行符),所以當有在字符串中多於一個}},它總是匹配最後的}}(如果兩個}}之間沒有任何\r\n!)。

儘量讓.*匹配不願意(ungreedy)是這樣的:

\{\{.*?}} 

這是正確的,你不必逃避}

你也可以這樣做:

\{\{[^}]*}} 

如果{{ ... }}不能包含一個}本身。

1

你必須使用非貪婪匹配:

\{\{.*?\}\} 

匹配括號之間的一切,用途:

\{\{(.*?)\}\} 
0

你需要什麼是「非貪婪的」修飾詞 - 讓你的正則表達式是\{\{.+?\}\}

5

\{\{.*?\}\}

試試我相信這是因爲你的模式是貪婪的。

​​解釋得很好。