2014-12-05 147 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