Fuy*_*Liu 62 java regex string java-8 java-9
为什么这个代码输出02在java-8中但o2在java-9或更高版本中输出?
"o2".replaceAll("([oO])([^[0-9-]])", "0$2")
Run Code Online (Sandbox Code Playgroud)
Kar*_*cki 65
很可能是由于JDK-6609854和JDK-8189343报告了负嵌套字符类处理(在您的示例中[^[0-9-]]).此行为在9和10中得到修复,但修复程序未向后移植到8. Java 8的错误解释为:
在Java中,否定也不能适用于任何出现在嵌套
[brackets]因此
[^c],如您所料,不匹配"c".
[^[c]]确实匹配"c".不是我所期待的.
[[^c]]与"c"不匹配对于范围或属性表达式也是如此 - 如果它们在括号内,则在out级别的否定不会影响它们.
[^a-z]与...相反[^[a-z]]
| 归档时间: |
|
| 查看次数: |
2726 次 |
| 最近记录: |