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