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

时间:2015-05-26 11:14:56

标签: php regex preg-replace

我想替换每个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);

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

3 个答案:

答案 0 :(得分:5)

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

((\w)\2{2})\2+

请参阅demo

替换为$1

IDEONE

$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)

此外,您可以使用\K进行重置,然后将其替换为空,这样效率会更高一些:

(\w)\1\1\K\1+

请参阅regex101