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

toc*_*777 9 java regex

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

\{\{.*\}\}
Run Code Online (Sandbox Code Playgroud)

一些例子:

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

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

有谁知道如何做到这一点?

谢谢.

Bar*_*ers 9

贪婪.*匹配任何东西(换行符除外),所以当}}字符串中有多个时,它总是匹配最后一个}}(如果没有\r,则\n两者之间}}!).

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

\{\{.*?}}
Run Code Online (Sandbox Code Playgroud)

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

你也可以这样做:

\{\{[^}]*}}
Run Code Online (Sandbox Code Playgroud)

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


ale*_*oco 5

试试吧 \{\{.*?\}\}

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

维基百科很好地解释了它.