1

我想知道以下正则表达式是否返回错误。我看不到“|” 不应该匹配。有任何想法吗?以及如何让模式匹配“|”?

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

提前致谢。

4

3 回答 3

2

[^ ]表达式匹配任何不在括号中的字符。由于|在括号中,因此不匹配。所有字符(除了少数字符,比如\])都在[^ ]表达式中按字面意思表示。

我想你的意思是这样说的:

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

这匹配除了这些字符之外的任何内容:

*\{}[]=><

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

"([^*\\\\{}[\\]=><])*"
于 2012-07-06T12:54:37.757 回答
1

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

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

于 2012-07-06T12:54:43.517 回答
0

这个打印true

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

但是其他地方的管道查找器 \\||(代替\\\\|)不起作用。

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

于 2012-07-06T13:25:41.420 回答