我想替换每个WORD中的所有连续字符,如果有三个以上(三个是德语中最可能的,两个是英语,所以我知道输出示例在语法上是错误的。)
示例输入:
Hellooooo Louis, whaaaaaat's up pal?
预期产出:
Hellooo Louis, whaaat's up pal?
我试图改变:
preg_replace('/(\w)\1+/', '$1', $word);
到
preg_replace('/(\w)\3+/', '$1', $word);
但是,它不会输出任何内容。
答案 0 :(得分:5)
您可以使用以下正则表达式:
((\w)\2{2})\2+
请参阅demo
替换为$1
。
$re = "#((\w)\\2{2})\\2+#";
$str = "Hellooooo Louis, whaaaaaat's up pal?";
$subst = "$1";
$result = preg_replace($re, $subst, $str);
echo $result;
输出:
Hellooo Louis, whaaat's up pal?
<强>说明强>
我们使用(\w)
捕获符号 - 它是第2组值。然后,我们检查它是否后面跟\2{2}
正好相同的字符2次,然后我们将其捕获到组1.然后,我们将更多相同的后续字符与\2
反向引用匹配。
答案 1 :(得分:2)
这是一种方法:
preg_replace('/((\w)\2\2)\2+/', '$1', $word);
答案 2 :(得分:1)