如何preg_replace重复单词

时间:2014-07-07 09:30:34

标签: php regex preg-replace

我试图preg_replace重复单词,但以下留下了一些单词。我认为只需要前两个。

<?php
$text ='around background background background background';
$non_repeat = preg_replace("/\b(\w+)\s+\\1\b/i", "$1", $text);
echo $non_repeat;
?>

如何解决?

2 个答案:

答案 0 :(得分:1)

在regex下面会用一个背景字符串替换所有背景字符串

\b(\w+)(?:\s\1)+

DEMO

您的PHP代码将是,

<?php
$text ='around background background background background';
$non_repeat = preg_replace("/\b(\w+)(?:\s\\1)+/i", "$1", $text);
echo $non_repeat;
?>  //=> around background

IDEONE

答案 1 :(得分:1)

要消除所有重复的单词,请使用:

$replaced = preg_replace('~\b(\w+)\K\b(?:\s*\1)+~', '', $yourstring);

请参阅the demo中的第二个彩色组。

<强>解释

  • \b是开头字边界
  • (\w+)将该字词捕获到第1组
  • \K告诉引擎放弃与其返回的最终匹配项目匹配的内容
  • \b是结束字边界
  • (?:\s*\1)+匹配可选空格,然后匹配组1,一次或多次
  • 我们用空字符串
  • 替换它