java - 为什么string.matches ["+-*/"]会报模式异常?

标签 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?
}

因为'-'是转义符?但为什么它会正常工作,如果“-”与“+”切换?

最佳答案

是因为-用于定义字符类中的字符范围。自 +*之后在 ascii 表中,范围没有意义,你得到一个错误。

要有文字 -在字符类的中间,你必须逃避它。如果 - 没有问题是在类(class)开始或结束时,因为它是明确的。

另一种不需要转义 - 的情况是当你之前有一个字符类快捷方式时,例如:

[\\d-abc]  

(当字符类快捷方式放在 [abc-\d] 之后时,其他正则表达式引擎如 pcre 允许相同,但 Java 似乎不允许这样做。)

关于java - 为什么string.matches ["+-*/"]会报模式异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22340775/

相关文章:

java - 如何通过使用 -MapStruct 从源对象复制值来填充目标对象内的 map ?

java - 获取 Dbus 的 Java 绑定(bind)以在 Android 上运行

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - 在 Spring Boot 中使用 JSP 中的自定义标记文件

regex - 使用 sed 在字符串中附加字符串值

java - Android 错误:Telephony.Threads 类型的 getOrCreateThreadId 方法未定义

regex - 使用字典替换字符串中的单词

java - 使用正则表达式解析数学表达式

regex - 在 perl 中搜索和用普通破折号替换小数破折号的正则表达式?

java - 从字符串中提取自定义 HTML 属性