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