2011-07-18 52 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

\{\{.*?\}\}

试试我相信这是因为你的模式是贪婪的。

​​解释得很好。