给定这样的Regex代码:

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的信息将很有帮助

最佳答案

|是正则表达式中的特殊元字符,其作用类似于通常用于组合两个正则表达式的逻辑OR运算符。您需要转义|符号,以便它与文字|符号匹配。

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


矮得多。

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

10-07 15:33