我想匹配一個字符串中雙括號內的所有內容。我使用下面的表達式: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