Java 为什么这个正则表达式不能从字符串中删除所有3个或更多的匹配项?

Java 为什么这个正则表达式不能从字符串中删除所有3个或更多的匹配项?,java,regex,Java,Regex,这个正则表达式有点问题。我正在尝试输入并删除所有3个或更多出现的字母 代码 实际产量 预期产量 您的图案不匹配3个或多个实例:它匹配4个或多个实例-第一个实例,以及同一字符的3个或多个后续实例 如果要匹配3个或更多,请将{3,}更改为{2,},并将$1更改为$1$1,以保留输出中的前两个匹配项 您的图案与3个或3个以上的出现不匹配:它匹配4个或4个以上的出现-第一个出现,以及同一字符的3个或3个以上的后续出现 如果要匹配3个或更多,请将{3,}更改为{2,},并将$1更改为$1$1,以保留输出中

这个正则表达式有点问题。我正在尝试输入并删除所有3个或更多出现的字母

代码 实际产量 预期产量
您的图案不匹配3个或多个实例:它匹配4个或多个实例-第一个实例,以及同一字符的3个或多个后续实例

如果要匹配3个或更多,请将
{3,}
更改为
{2,}
,并将
$1
更改为
$1$1
,以保留输出中的前两个匹配项


您的图案与3个或3个以上的出现不匹配:它匹配4个或4个以上的出现-第一个出现,以及同一字符的3个或3个以上的后续出现

如果要匹配3个或更多,请将
{3,}
更改为
{2,}
,并将
$1
更改为
$1$1
,以保留输出中的前两个匹配项


1美元1美元的零件-这不正是团队的特点吗?我在看文档,上面说0美元就是整个字符串。想知道为什么/如何工作。
$1
是组-第一个匹配的字符。如果您想要它两次,就像在输出中一样,请将其加倍。稍微解释一下ops正则表达式为什么匹配4个字符,以及它是如何工作的,这将使这个答案更加准确better@Cruncher它匹配一件事,然后再匹配同一件事3次或更多次。1+3或更多=4或更多。我不知道该怎么解释。1美元1美元的部分——这不就是团队吗?我在看文档,上面说0美元就是整个字符串。想知道为什么/如何工作。
$1
是组-第一个匹配的字符。如果您想要它两次,就像在输出中一样,请将其加倍。稍微解释一下ops正则表达式为什么匹配4个字符,以及它是如何工作的,这将使这个答案更加准确better@Cruncher它匹配一件事,然后再匹配同一件事3次或更多次。1+3或更多=4或更多。我不知道该怎么解释。
String input = "hhheeeelllooo";
System.out.println(input.replaceAll("(.)\\1{3,}", "$1"));
hhhelllooo
hheelloo