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

Tom*_*ner 2 php regex preg-replace

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

输入示例:

Hellooooo Louis, whaaaaaat's up pal?
Run Code Online (Sandbox Code Playgroud)

预期产量:

Hellooo Louis, whaaat's up pal?
Run Code Online (Sandbox Code Playgroud)

我试图改变:

preg_replace('/(\w)\1+/', '$1', $word);
Run Code Online (Sandbox Code Playgroud)

preg_replace('/(\w)\3+/', '$1', $word);
Run Code Online (Sandbox Code Playgroud)

但是,它不会输出任何内容.

Wik*_*żew 5

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

((\w)\2{2})\2+
Run Code Online (Sandbox Code Playgroud)

演示

替换为$1.

IDEONE:

$re = "#((\w)\\2{2})\\2+#"; 
$str = "Hellooooo Louis, whaaaaaat's up pal?"; 
$subst = "$1"; 
$result = preg_replace($re, $subst, $str);
echo $result;
Run Code Online (Sandbox Code Playgroud)

输出:

Hellooo Louis, whaaat's up pal?
Run Code Online (Sandbox Code Playgroud)

说明:

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