PHP 替换句子中连续出现的字符

PHP Replace consecutive occurrence of characters in sentence

如果超过三个,我想替换每个 WORD 中的所有连续字符(三个是最可能的德语,两个是英语,所以我知道输出示例在语法上是错误的)。

示例输入:

Hellooooo Louis, whaaaaaat's up pal?

预期输出:

Hellooo Louis, whaaat's up pal?

我尝试更改:

preg_replace('/(\w)+/', '', $word);

preg_replace('/(\w)+/', '', $word);

然而,它没有输出任何东西。

这里有一个方法:

preg_replace('/((\w))+/', '', $word);

您可以使用以下正则表达式:

((\w){2})+

demo

替换为</code>。</p> <p><a href="https://ideone.com/mLz1Oq" rel="nofollow">IDEONE</a>:</p> <pre><code>$re = "#((\w)\2{2})\2+#"; $str = "Hellooooo Louis, whaaaaaat's up pal?"; $subst = ""; $result = preg_replace($re, $subst, $str); echo $result;

输出:

Hellooo Louis, whaaat's up pal?

解释:

我们用 (\w) 捕获符号 - 它是第 2 组值。然后,我们检查它后面是否跟有 {2} 的相同字符恰好 2 次,并将其捕获到第 1 组。然后,我们将任何更多相同的后续字符与 反向引用匹配。

也可以用\K重置之后换成空的,效率高一点:

(\w)\K+

regex101