Java SE 17 では正規表現のパターン・マッチングに関する振る舞いの変更があります。
以前は、1 つ以上のネストされた ([] で囲まれた) 文字クラスが交差 (&&) の後にあり、その後にネストされていない文字クラスが続く場合、一連のネストされた文字クラスは使用されませんでした。 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 パターン・マッチングで交差後文字クラスが失われる (& &) 演算子」を参照してください。