带竖条的Java正则表达式
我想知道下面的正则表达式是否返回false。我看不出“|”不应该匹配。有什么想法吗?我如何允许模式匹配“|”带竖条的Java正则表达式,java,regex,Java,Regex,我想知道下面的正则表达式是否返回false。我看不出“|”不应该匹配。有什么想法吗?我如何允许模式匹配“|” Pattern Pattern=Pattern.compile(“([^\\*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[\\\\\\\\\\\\\\]\\\\\\\\\\\\\\\\\\[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Pattern Pattern=Pattern.compile(“([^\\*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[\\\\\\\\\\\\\\]\\\\\\\\\\\\\\\\\\[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
我想你是想说这样的话:
([^*\\{}[\]=><])*
([^*\{}[\]=><
要将其放入字符串中,可以执行以下操作:
"([^*\\\\{}[\\]=><])*"
”([^*\\\{}[\\]=>我认为您误解了正则表达式中字符类的概念:[^…]
将^
之后的所有字符视为普通字符,而不是元字符。因此,您不需要类中的“或”管道
由于字符类中存在|
,并且您正在使用^
反转集合,因此单个管道与您的regexp不匹配。此打印true
:
System.out.println(Pattern
.compile("([\\||^\\*|\\||\\{|\\}|\\[|\\]|=|>|<])*")
.matcher("|")
.matches());
System.out.println(模式)
.compile(([\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。
"([^*\\\\{}[\\]=><])*"
System.out.println(Pattern
.compile("([\\||^\\*|\\||\\{|\\}|\\[|\\]|=|>|<])*")
.matcher("|")
.matches());