php - 在字符串中查找具有相似结尾的单词

时间:2015-01-29 04:18:58

标签: php string

我有一个包含多个单词的php字符串,我想提取以(X2)结尾的单词,并将它们作为重复单词添加回原始字符串。即:

$ string =(红色,白色(X2),绿色,黑色,灰色(X2));

结果应该是:

$ string =(红色,白色,白色,绿色,黑色,灰色,灰色);

他们不必彼此相邻......

我知道如何用逗号分隔它们......但不知道这个!

2 个答案:

答案 0 :(得分:0)

希望这就是你要找的东西。你不会解析作为PHP的一部分的示例字符串,所以我假设它是一个字符串。最快的解决方案是使用正则表达式或类似的东西,我避免这样做,因为如果你不知道那是什么,可能更容易摄取这个解决方案。

$string = "red, white (X2), green, black, grey (X2)";

$words = explode(" " , $string);

$temp = "";
$new_string = array();
foreach ( $words as $w ) {
    if ( strpos($w, "(X2)") !== false ) {
        array_push($new_string , $temp.",");
    } else {
        array_push($new_string , $w);
    }
    $temp = $w;
}

echo implode(" " , $new_string );

答案 1 :(得分:0)

通过更多控制来实现这一目标的另一种方法是创建function,例如:

function createNewString($string, $delimiter = ', ')
{
    $pieces = explode($delimiter, $string);

    foreach($pieces as $key => $value)
    {   
        if( substr($value, -4) == '(X2)' )
        {
            preg_match('/.+?(?=\(X2\))/', $value, $matches);

            for($i = 1; $i <= 2; $i++)
            {
                $newPieces[] = trim($matches[0]);
            }

            continue;
        }

        $newPieces[] = $value;
    }

    return $newString = implode($delimiter, $newPieces);
}

然后,您可以将代码中的任何位置的简单字符串传递给函数,并获取已清理的字符串。

$string = 'red, white (X2), green, black, grey (X2)';

echo createNewString($string);

输出:

red, white, white, green, black, grey, grey

这允许您控制分隔符,以防它在字符串中发生更改。然后,在重新创建字符串时,输出将使用相同的分隔符。

此外,它确保逗号放在正确的位置,并从末尾删除任何尾随逗号。