Java正则表达式匹配{{double curly brace}中的字符}}

时间:2011-07-18 14:16:33

标签: java regex

我正在尝试匹配字符串中的双花括号内的所有内容。我使用以下表达式:

\{\{.*\}\}

一些例子:

The {{dog}} is not a cat.这正确匹配{{dog}}

然而,
The {{dog}} is a {{cat}}匹配第一场比赛后的所有内容,而不是返回两场比赛。我希望它匹配两次,一次用于{{dog}},一次用于{{cat}}

有谁知道怎么做?

感谢。

5 个答案:

答案 0 :(得分:8)

贪婪的.*匹配任何内容(换行符除外),因此当字符串中有多个}}时,它始终与最后一个}}匹配(如果没有两个\r之间的任何\n}}!)。

尝试让.*匹配不情愿(ungreedy)像这样:

\{\{.*?}}

这是正确的,你无需逃避}

你也可以这样做:

\{\{[^}]*}}

如果{{ ... }}本身不能包含单个}

答案 1 :(得分:5)

尝试使用\{\{.*?\}\}

我相信这是因为你拥有的模式很贪婪。

Wikipedia解释得非常好。

答案 2 :(得分:1)

你必须使用非贪婪的比赛:

\{\{.*?\}\}

匹配大括号之间的所有内容,请使用:

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

答案 3 :(得分:0)

你需要的是“非贪婪”修饰符 - 所以你的正则表达式是\{\{.+?\}\}

答案 4 :(得分:0)

尝试一下,它对我有用:

Pattern pattern = Pattern.compile("\\{\\{(.*?)\\}\\}");
Matcher matchPattern = pattern.matcher("The {{cat}} loves the {{dog}}");
while(matchPattern.find()) {
    System.out.println(matchPattern.group(1));
}