我想知道以下正则表达式返回false。我不能在" |"不应该匹配。有任何想法吗?如何让模式匹配" |"?
Pattern pattern = Pattern.compile("([^\\*|\\\\|\\{|\\}|\\[|\\]|=|>|<])*");
boolean valid = pattern.matcher("|").matches();
提前致谢。
答案 0 :(得分:2)
[^ ]
表达式匹配括号内没有的任何字符。由于|
位于括号中,因此不匹配。所有字符(除了少数字符,例如\
和]
)都在[^ ]
表达式中。
我想你想说的是这样的话:
([^*\\{}[\]=><])*
这匹配以下任何字符:
*\{}[]=><
要将其放入字符串中,您可以这样做:
"([^*\\\\{}[\\]=><])*"
答案 1 :(得分:1)
我认为你误解了正则表达式中字符类的概念:[^...]
将^
之后的所有字符视为普通字符,而不是元字符。因此,您不需要在类中使用“OR”管道|
。
由于|
存在于字符类中,并且因为您使用^
来反转集合,因此正则表达式不匹配单个管道。
答案 2 :(得分:0)
此打印true
:
System.out.println(Pattern
.compile("([\\||^\\*|\\||\\{|\\}|\\[|\\]|=|>|<])*")
.matcher("|")
.matches());
但管道查找程序 \\||
(代替\\\\|
)在其他地方无效。
Kendall Frey向您解释^
如何打扰您的正则表达式