我是PHP的新手。我想用特定的重复单词替换一个字符串,如果超过三个到两个,如下所示?
$wordToCheck = "abc";
$string = "abc abc abc abc Hello World abc abc abc My name is abc"
结果将是:
$outString = "abc abc Hello World abc abc My name is abc"
我如何在PHP中执行此操作?
提前致谢。
答案 0 :(得分:2)
您可以使用以下模式替换2个以上连续的相同单词,该模式使用反向引用到捕获组1 (即\1
):
$pattern = '~\b(\w+) \1 \K\1(?: \1)*\b ?~';
$replacement = '';
$str = preg_replace($pattern, $replacement, $str);
请注意,由于\K
会从匹配结果中删除左侧匹配的所有内容,因此不会替换两个首次出现的内容。
答案 1 :(得分:2)
$string = "abc abc abc abc Hello World abc abc abc My name is abc";
print preg_replace("/abc abc abc( abc)*/","abc abc",$string);
答案 2 :(得分:0)
您可以像这样使用PHP爆炸:
$wordArray = explode ( " ", $string);
$ wordArray现在将包含原始字符串中每个以空格分隔的单词的一个元素。
然后你可以这样说:
$i = 0;
while ($wordArray[$i] == $wordToCheck) {
$i++;
}
此时,$ i将告诉您$ wordToCheck在字符串开头出现的次数。在此之后,PHP的array_shift
将从数组的前面删除元素,并且在您移出足够的单词后只留下两个,implode
函数将转为数组返回一个字符串。
编辑添加:我没有使用正则表达式;我不知道该怎么做,我我确定你不需要。
再次编辑:这已经过测试,即使第一个"字#34;字符串不是$ wordToCheck:
<?php
$wordToCheck = "abc";
$string = "abc abc abc abc Hello World abc abc abc My name is abc";
$wordArray = explode ( " ", $string);
$i = 0;
while ($wordArray[$i] == $wordToCheck) {
$i++;
}
for ($j=0; $j < $i-2; $j++) {
array_shift($wordArray);
}
$string = implode(" ",$wordArray);
echo $string;
?>