答案 1
很可能是由于 JDK-6609854 和 JDK-8189343 报告了负嵌套字符类处理(在您的示例中)。此行为已在 9 和 10 中修复,但修复未向后移植到 8。Java 8 的错误解释如下:[^[0-9-]]
在Java中,否定不适用于嵌套中出现的任何内容
[brackets]
因此,与“c”不匹配,正如您所期望的那样。
[^c]
[^[c]]
与“c”匹配。不是我所期望的。
[[^c]]
与“c”不匹配这同样适用于范围或属性表达式 - 如果它们在括号内,则 out 级别的否定不会影响它们。
[^a-z]
与 相反[^[a-z]]
答案 2
推荐