2014-12-05 136 views
2

鑑於這種Regex代碼:Java的正則表達式匹配

Matcher m = Pattern.compile("c:.*?(|t:){1}.*?").matcher(string); 

我只想匹配類似c:somesubstring|t:somesubstring。然而,它也符合一些事情是這樣的:

c:somesubstring 

c:somesubstring|a:somesubtring 

怎麼會這樣來的?我使用(|t:){1}來保證模式|t:發生並且只發生一次。將有助於告訴我有什麼錯我的regex並給我一個regex只匹配c:somesubstring|t:somesubstring

+1

'{1}'確實*不*保證前面的項目不會出現一次以上。 – Biffen 2014-12-05 16:55:13

回答

1

|是正則表達式中一個特殊的元字符,其作用類似於通常用於兩個正則表達式組合邏輯或運算符。您需要跳過|符號,以便它符合文字|符號。

Matcher m = Pattern.compile("c:.*?(\\|t:){1}.*?").matcher(string); 

要短得多。

Matcher m = Pattern.compile("c:.*?\\|t:.*?").matcher(string); 
+0

或者把'|'放在像'[|]這樣的字符類中' – 2014-12-05 17:10:33