在PHP字符串中按顺序用特定值替换随机值

时间:2018-09-17 12:19:22

标签: php regex string

假设我有以下字符串:

{{Hi}}, This {{is}} {{Debby}}.

我想用传递给函数的变量替换{{ANYTHING}}中的文本。例如,如果函数为change_values('Hola', 'was', 'Antonio')

结果将是:

Hola, This was Antonio.

{{}}包围的第一个单词或字符被change_values()的第一个参数替换。同样,第二个单词或字符被第二个参数替换,依此类推。

为清楚起见,值HiisDebby可以更改。传递的参数也可以更改。唯一一致的是,First {{}}将被first参数替换,依此类推。

我原本打算使用str_replace(),但每次都在不断变化。我还考虑过使用regex,但无法弄清楚如何顺序进行替换。

任何帮助将不胜感激。

更多示例,

{{Fiona}} is a lucky {{girl}}.

将成为

Mike is a lucky man.

我在原始字符串中使用{{}}作为标识符,以便于弄清楚需要替换的内容。如果这会造成问题,我愿意接受其他(更好)的解决方案。

2 个答案:

答案 0 :(得分:0)

如果您使用的是PHP5.6或更高版本,则此功能将执行您想要的操作。它使用...将所有替换项打包到一个数组中,然后使用preg_replace用替换项替换{{}}包围的所有字符串。通过对limit使用preg_replace参数,可以防止模式用{{}}数组中的第一个值替换所有replacements字符串。

function change_values($string, ...$replacements) {
    return preg_replace(array_fill(0, count($replacements), '/{{[^}]+}}/'), $replacements, $string, 1);
}
echo change_values('{{Hi}}, This {{is}} {{Debby}}.', 'Hola', 'was', 'Antonio');
echo change_values('{{Fiona}} is a lucky {{girl}}.', 'Mike', 'man');

输出:

Hola, This was Antonio.
Mike is a lucky man.

答案 1 :(得分:0)

    $input = '{{Fiona}} is a lucky {{girl}}.';
    $replaceArray = ['Mike', 'man'];
    $expectedOut = 'Mike is a lucky man.';

    preg_match_all('/({{\w+}})/', $input,$matches);
    $out = str_replace($matches[0], $replaceArray, $input);

    if($out === $expectedOut){
        print_r($out);
    }