我正在尝试匹配字符串中的双花括号内的所有内容。我使用以下表达式:
\{\{.*\}\}
一些例子:
The {{dog}} is not a cat.
这正确匹配{{dog}}
然而,
The {{dog}} is a {{cat}}
匹配第一场比赛后的所有内容,而不是返回两场比赛。我希望它匹配两次,一次用于{{dog}},一次用于{{cat}}
有谁知道怎么做?
感谢。
答案 0 :(得分:8)
贪婪的.*
匹配任何内容(换行符除外),因此当字符串中有多个}}
时,它始终与最后一个}}
匹配(如果没有两个\r
之间的任何\n
和}}
!)。
尝试让.*
匹配不情愿(ungreedy)像这样:
\{\{.*?}}
这是正确的,你无需逃避}
。
你也可以这样做:
\{\{[^}]*}}
如果{{ ... }}
本身不能包含单个}
。
答案 1 :(得分:5)
答案 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));
}