Java 为什么string.matches[";&x2B;-*/";]会报告模式异常?
我有以下代码:Java 为什么string.matches[";&x2B;-*/";]会报告模式异常?,java,regex,Java,Regex,我有以下代码: public static void main(String[] args) { String et1 = "test"; String et2 = "test"; et1.matches("[-+*/]"); //works fine et2.matches("[+-*/]"); //java.util.regex.PatternSyntaxException, why? } 因为“-”是转义字符?但是,如果“-”与“+
public static void main(String[] args) {
String et1 = "test";
String et2 = "test";
et1.matches("[-+*/]"); //works fine
et2.matches("[+-*/]"); //java.util.regex.PatternSyntaxException, why?
}
因为“-”是转义字符?但是,如果“-”与“+”切换,它为什么工作良好呢?
-
在字符类中(使用[xxx]
)定义一个范围,例如:所有小写字符的[a-z]
。如果你想说“破折号”,它必须在第一个或最后一个位置。我通常把它放在第一位以避免混淆
或者,您也可以对其进行转义:
[+\-*/]
-
在字符类([xxx]
)内用于定义范围,例如:所有小写字符的[a-z]
。如果你想说“破折号”,它必须在第一个或最后一个位置。我通常把它放在第一位以避免混淆
或者可以对其进行转义:
[+\-*/]
这是因为-
用于定义字符类中的字符范围。由于在ascii表中,+
位于*
之后,因此该范围没有意义,您将获得一个错误
在字符类的中间有一个文字“代码> -/CODE”,必须避免它。如果
-
位于类的开头或结尾,则没有问题,因为它是明确的
不需要转义-
的另一种情况是,以前有字符类快捷方式,例如:
[\\d-abc]
(其他正则表达式引擎,如pcre,在字符类快捷方式放在
[abc-\d]
之后时也允许这样做,但Java似乎不允许这样做。)这是因为-
用于定义字符类中的字符范围。由于在ascii表中,+
位于*
之后,因此该范围没有意义,您将获得一个错误
在字符类的中间有一个文字“代码> -/CODE”,必须避免它。如果
-
位于类的开头或结尾,则没有问题,因为它是明确的
不需要转义-
的另一种情况是,以前有字符类快捷方式,例如:
[\\d-abc]
(其他正则表达式引擎(如pcre)在字符类快捷方式放在
[abc-\d]
之后时也允许这样做,但Java似乎不允许这样做。)仅供参考,Java正则表达式元字符定义如下:
或:
无论顺序如何,都可以工作。仅供参考,Java正则表达式元字符定义如下: 或:
无论顺序如何,都可以工作。我认为您应该使用:[\-\+\*/]
因为:“-”来定义范围,例如:[a-d]它的意思是:a,b,c,d我想你应该用:[\-\+\*/]
因为:“-”来定义范围,例如:[a-d]它的意思是:a,b,c,d在这种情况下,实际上没有必要转义括号内的任何内容。在这种情况下,实际上没有必要转义括号内的任何内容。
et2.matches("[\\+\\-\\*/]");
et2.matches("[\\-\\+\\*/]");