java里正则表达式replaceAll

预期结果是abcd,为什么运行结果是ad啊

        String s = "abbbbccccdddddddddd";
        String s1 = s.replaceAll("((.)\\2)+", "$2");
s.replaceAll("((.)(?:\\2)+)", "$2");

try this

这是abcd


    String s = "abbbbccccdddddddddd";
        String result = s.replaceAll("(.)\\1+", "$1");
        System.out.println(result); // 输出 "abcd"

你的解释:

"((.)\2)+"表示匹配连续重复的字符,其中"(.)"表示任意字符,"\2"表示对前面一个括号内的内容进行引用,因此"((.)\2)+"表示匹配连续重复的字符,例如"bb"、"cccc"、"dddddddddd"。

而"$2"则表示保留匹配到的字符中的第二个字符,例如"bb"中的"b"、"cccc"中的"c"、"dddddddddd"中的"d"。因此,最终的替换结果是"ad",即去除连续重复字符后的结果。