编译具有字符类和单词边界的详细 Java 正则表达式时出错
为什么这个模式无法编译:
Pattern.compile("(?x)[ ]\\b");
错误
ERROR java.util.regex.PatternSyntaxException:
Illegal/unsupported escape sequence near index 8
(?x)[ ]\b
^
at java_util_regex_Pattern$compile.call (Unknown Source)
虽然以下等效项有效?
Pattern.compile("(?x)\\ \\b");
Pattern.compile("[ ]\\b");
Pattern.compile(" \\b");
这是Java正则表达式编译器中的一个错误,还是我遗漏了什么?我喜欢在冗长的正则表达式中使用,而不是反斜杠 - 反斜杠 - 空间,因为它可以节省一些视觉噪音。但显然他们是不一样的![ ]
PS:这个问题不是关于反斜杠的。它是关于使用包含单个空格的字符类而不是使用反斜杠来转义详细正则表达式中的空格。[ ]
不知何故,详细正则表达式和包含单个空格的字符类的组合会丢弃编译器,并使其无法识别单词边界转义(?x)
[ ]
\b
使用 Java 进行了高达 1.8.0_151 的测试