假设您有一个字符串:
$string = 'hello my name is blah blah and wats yours';
你想通过并检查任何可能存在重复的地方..不是任何单词,而只是在这个例子中选择的单词'blah'。
$variable = 'blah';
即如果'blah'背靠背出现 - 请删除其中一个。
我考虑将字符串拆分成一个数组,如果数组中的一个变量以相同的单词开头,则最后一个变量结束,然后剪切一个并重建字符串。似乎是tedius所以这就是为什么我在问是否有更简单的方法。
有什么想法吗?
编辑:我刚刚意识到我没有考虑用'blah'做一个简单的'blah blah'的preg_match。
答案 0 :(得分:3)
这个怎么样:
$string = 'hello my name is blah blah and wats yours';
$variable = 'blah';
$string = preg_replace( '/(\b'.$variable.'\s+){2,}/' , '\1' , $string );
允许处理多个变量(即您可以循环遍历许多$variable
,也可以创建一个数组并使用单个preg_replace()
调用。
或者只使用str_replace()
$string = 'hello my name is blah blah and wats yours';
$variable = 'blah';
$string = str_replace( $variable.' '.$variable.' ' , $variable.' ' , $string );
答案 1 :(得分:1)
$string = 'hello my name is blah blah and wats yours';
$search_string = 'blah';
$first_occurence = strpos($string , $search_string);
If (int preg_match($search_string , $string ) > 1) {
echo "String found more than once!!!";
// remove all occurences of searchstring from string excepte the first one
$string = substr ($string, 0, $first_occurence +1) . str_replace($search_string, '', substr ($string,$first_occurence +1));
}
答案 2 :(得分:1)
你可以检查$ string中每个出现的$变量的位置,并检查几个出现的位置是否只是$ variable变量的长度(可能是+空格)。
答案 3 :(得分:1)
到目前为止,所有答案都在谈论字符串中单词的重复。我想你只想删除连续的相同单词。您可以使用preg_replace
:
$string = 'hello my name is blah blah and wats yours';
$string = preg_replace('/\b(\w+)(\s+)\\1\s*/', '\\1\\2', $string);
请注意,此功能相当愚蠢,因此会删除“有过”这样的有效短语。你可以使用白名单和preg_replace_callback
来解决这个问题。
重新阅读您的问题,之前错过了一些关于“仅限指定字词”的内容。您可以使用不得重复的单词黑名单来执行此操作:
$string = 'hello my name is blah blah and wats yours. I had had a bad day';
$string = preg_replace_callback('/\b(\w+)(\s+)\\1\s*/i', function($matches) {
$blacklist = array ('blah');
if (in_array(strtolower($matches[1]), $blacklist)) {
return $matches[1] . $matches[2];
} else {
return $matches[0];
}
}, $string);
// $string == "hello my name is blah and wats yours. I had had a bad day"
您可以在$blacklist
数组中添加多个单词。