匹配{{双大括号内的字符}的Java正则表达式
我正在尝试匹配字符串中双花括号内的所有内容。我使用以下表达式:匹配{{双大括号内的字符}的Java正则表达式,java,regex,Java,Regex,我正在尝试匹配字符串中双花括号内的所有内容。我使用以下表达式: \{\{.*\}\} 一些例子: The{{dog}}不是猫。这与{{dog}正确匹配 然而, The{{dog}}是一个{cat}在第一次匹配之后匹配所有内容,而不是返回两个匹配。我希望它匹配两次,一次为{{{dog}},一次为{{{cat} 有人知道怎么做吗 谢谢。您必须使用非贪婪匹配: \{\{.*?\}\} 要匹配大括号之间的所有内容,请使用: \{\{(.*?)\}\} 贪婪的*匹配任何东西(断行除外),因此当字符串
\{\{.*\}\}
一些例子:The{{dog}}不是猫。
这与{{dog}正确匹配然而,
The{{dog}}是一个{cat}
在第一次匹配之后匹配所有内容,而不是返回两个匹配。我希望它匹配两次,一次为{{{dog}},一次为{{{cat}
有人知道怎么做吗
谢谢。您必须使用非贪婪匹配:
\{\{.*?\}\}
要匹配大括号之间的所有内容,请使用:
\{\{(.*?)\}\}
贪婪的
*
匹配任何东西(断行除外),因此当字符串中有多个}
时,它总是匹配最后一个}
(如果两个}
之间没有任何\r
和\n
)
试着使*
匹配不情愿(ungreedy),如下所示:
\{\{.*?}}
没错,您不必逃避}
你也可以这样做:
\{\{[^}]*}}
如果一个
{…}}
本身不能包含一个}
。你需要的是“非贪婪”修饰符-因此你的正则表达式是\{.+?\}
试试\{.\}
我相信这是因为你的模式是贪婪的
解释得很好。试试这个,它对我很有用:
Pattern pattern = Pattern.compile("\\{\\{(.*?)\\}\\}");
Matcher matchPattern = pattern.matcher("The {{cat}} loves the {{dog}}");
while(matchPattern.find()) {
System.out.println(matchPattern.group(1));
}
正则表达式使用贪婪算法(因此想要获取匹配的最大字符串)。这对你有帮助还是你还需要更多?这应该可以完成工作\{\{.*.\}\}如果你得到了答案,接受对你帮助最大的答案