我想匹配一个字符串中双括号内的所有内容。我使用下面的表达式:Java正则表达式匹配{{双重大括号内的字符}}
\{\{.*\}\}
一些例子:
The {{dog}} is not a cat.
这正确匹配{{狗}}
然而,
The {{dog}} is a {{cat}}
匹配后的首场比赛的一切,而不是返回两场比赛。我希望它匹配两次,一次{{dog}},一次{{cat}}
有谁知道如何做到这一点?
谢谢。
我想匹配一个字符串中双括号内的所有内容。我使用下面的表达式:Java正则表达式匹配{{双重大括号内的字符}}
\{\{.*\}\}
一些例子:
The {{dog}} is not a cat.
这正确匹配{{狗}}
然而,
The {{dog}} is a {{cat}}
匹配后的首场比赛的一切,而不是返回两场比赛。我希望它匹配两次,一次{{dog}},一次{{cat}}
有谁知道如何做到这一点?
谢谢。
贪婪.*
匹配任何内容(除换行符),所以当有在字符串中多于一个}}
,它总是匹配最后的}}
(如果两个}}
之间没有任何\r
和\n
!)。
尽量让.*
匹配不愿意(ungreedy)是这样的:
\{\{.*?}}
这是正确的,你不必逃避}
。
你也可以这样做:
\{\{[^}]*}}
如果{{ ... }}
不能包含一个}
本身。
你必须使用非贪婪匹配:
\{\{.*?\}\}
匹配括号之间的一切,用途:
\{\{(.*?)\}\}
你需要什么是“非贪婪的”修饰词 - 让你的正则表达式是\{\{.+?\}\}
与\{\{.*?\}\}
试试我相信这是因为你的模式是贪婪的。
解释得很好。
正则表达式使用贪婪算法(因此想抓住一个字符串来匹配)。这有帮助还是你需要更多? – rajah9
这应该做的工作\ {\。*?\} \} – DaMainBoss
如果你收到你的答案接受最帮你的那个 – RMT