Java正则表达式与垂直条

时间:2012-07-06 12:48:34

标签: java regex

我想知道以下正则表达式返回false。我不能在" |"不应该匹配。有任何想法吗?如何让模式匹配" |"?

Pattern pattern = Pattern.compile("([^\\*|\\\\|\\{|\\}|\\[|\\]|=|>|<])*");
boolean valid = pattern.matcher("|").matches();

提前致谢。

3 个答案:

答案 0 :(得分:2)

[^ ]表达式匹配括号内没有的任何字符。由于|位于括号中,因此不匹配。所有字符(除了少数字符,例如\])都在[^ ]表达式中。

我想你想说的是这样的话:

([^*\\{}[\]=><])*

这匹配以下任何字符:

*\{}[]=><

要将其放入字符串中,您可以这样做:

"([^*\\\\{}[\\]=><])*"

答案 1 :(得分:1)

我认为你误解了正则表达式中字符类的概念:[^...]^之后的所有字符视为普通字符,而不是元字符。因此,您不需要在类中使用“OR”管道|

由于|存在于字符类中,并且因为您使用^来反转集合,因此正则表达式不匹配单个管道。

答案 2 :(得分:0)

此打印true

 System.out.println(Pattern
            .compile("([\\||^\\*|\\||\\{|\\}|\\[|\\]|=|>|<])*")
            .matcher("|")
            .matches());

管道查找程序 \\||(代替\\\\|)在其他地方无效。

Kendall Frey向您解释^如何打扰您的正则表达式