删除字符串中变量的重复?

时间:2010-11-17 10:12:53

标签: php

假设您有一个字符串:

  $string = 'hello my name is blah blah and wats yours';

你想通过并检查任何可能存在重复的地方..不是任何单词,而只是在这个例子中选择的单词'blah'。

   $variable = 'blah';

即如果'blah'背靠背出现 - 请删除其中一个。

我考虑将字符串拆分成一个数组,如果数组中的一个变量以相同的单词开头,则最后一个变量结束,然后剪切一个并重建字符串。似乎是tedius所以这就是为什么我在问是否有更简单的方法。

有什么想法吗?

编辑:我刚刚意识到我没有考虑用'blah'做一个简单的'blah blah'的preg_match。

4 个答案:

答案 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数组中添加多个单词。