在 Java SE 17 中,正则表达式模式匹配行为已发生了更改。以前,当跟在交集 (&&) 后面的一个或多个嵌套字符类(用 [] 括起)后跟一个非嵌套字符类时,将不使用嵌套字符类序列。在 Java SE 17 中,现在会使用这些嵌套字符类。例如,给定正则表达式:
"[A-Z&&[A-Z]0-9]" - 以前未使用 [A-Z]。
此规则标志了以下方法的调用,其中提供的正则表达式包含交集,后跟嵌套字符类,后跟非嵌套字符类:
java.util.regex.Pattern.compile(java.lang.String)java.util.regex.Pattern.compile(java.lang.String, int)java.util.regex.Pattern.matches(java.lang.String, java.lang.CharSequence)java.lang.String.matches(java.lang.String)java.lang.String.replaceAll(java.lang.String, java.lang.String)java.lang.String.replaceFirst(java.lang.String, java.lang.String)java.lang.String.split(java.lang.String)java.lang.String.split(java.lang.String, int)有关此行为更改的更多信息,请参阅 RegEx Pattern Matching Loses Character Class After Intersection (&&) Operator。