我有这个代码:
public static void main(String[] args) {
String et1 = "test";
String et2 = "test";
et1.matches("[-+*/]"); //works fine
et2.matches("[+-*/]"); //java.util.regex.PatternSyntaxException, why?
}
因为'-'是转义符?但为什么它会正常工作,如果“-”与“+”切换?
最佳答案
是因为-
用于定义字符类中的字符范围。自 +
在*
之后在 ascii 表中,范围没有意义,你得到一个错误。
要有文字 -
在字符类的中间,你必须逃避它。如果 -
没有问题是在类(class)开始或结束时,因为它是明确的。
另一种不需要转义 -
的情况是当你之前有一个字符类快捷方式时,例如:
[\\d-abc]
(当字符类快捷方式放在 [abc-\d]
之后时,其他正则表达式引擎如 pcre 允许相同,但 Java 似乎不允许这样做。)
关于java - 为什么string.matches ["+-*/"]会报模式异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22340775/