我想知道以下正则表达式是否返回错误。我看不到“|” 不应该匹配。有任何想法吗?以及如何让模式匹配“|”?
Pattern pattern = Pattern.compile("([^\\*|\\\\|\\{|\\}|\\[|\\]|=|>|<])*");
boolean valid = pattern.matcher("|").matches();
提前致谢。
该[^ ]表达式匹配任何不在括号中的字符。由于|在括号中,因此不匹配。所有字符(除了少数字符,比如\和])都在[^ ]表达式中按字面意思表示。
我想你的意思是这样说的:
([^*\\{}[\]=><])*
这匹配除了这些字符之外的任何内容:
*\{}[]=><
要将其放入字符串中,您可以这样做:
"([^*\\\\{}[\\]=><])*"
我认为您误解了正则表达式中字符类的概念:[^...]将所有字符^视为普通字符,而不是元字符。因此,您不需要|类内的“OR”管道。
由于|存在于字符类中,并且由于您^用于反转集合,因此您的正则表达式不匹配单个管道。
这个打印true:
System.out.println(Pattern
.compile("([\\||^\\*|\\||\\{|\\}|\\[|\\]|=|>|<])*")
.matcher("|")
.matches());
但是其他地方的管道查找器 \\||(代替\\\\|)不起作用。
Kendall Frey 向您解释如何^扰乱您的正则表达式