我试图preg_replace重复单词,但以下留下了一些单词。我认为只需要前两个。
<?php
$text ='around background background background background';
$non_repeat = preg_replace("/\b(\w+)\s+\\1\b/i", "$1", $text);
echo $non_repeat;
?>
如何解决?
答案 0 :(得分:1)
在regex下面会用一个背景字符串替换所有背景字符串
\b(\w+)(?:\s\1)+
您的PHP代码将是,
<?php
$text ='around background background background background';
$non_repeat = preg_replace("/\b(\w+)(?:\s\\1)+/i", "$1", $text);
echo $non_repeat;
?> //=> around background
答案 1 :(得分:1)
要消除所有重复的单词,请使用:
$replaced = preg_replace('~\b(\w+)\K\b(?:\s*\1)+~', '', $yourstring);
请参阅the demo中的第二个彩色组。
<强>解释强>
\b
是开头字边界(\w+)
将该字词捕获到第1组\K
告诉引擎放弃与其返回的最终匹配项目匹配的内容\b
是结束字边界(?:\s*\1)+
匹配可选空格,然后匹配组1,一次或多次