假设我有以下字符串:
{{Hi}}, This {{is}} {{Debby}}.
我想用传递给函数的变量替换{{ANYTHING}}
中的文本。例如,如果函数为change_values('Hola', 'was', 'Antonio')
。
结果将是:
Hola, This was Antonio.
被{{}}
包围的第一个单词或字符被change_values()
的第一个参数替换。同样,第二个单词或字符被第二个参数替换,依此类推。
为清楚起见,值Hi
,is
和Debby
可以更改。传递的参数也可以更改。唯一一致的是,First {{}}
将被first参数替换,依此类推。
我原本打算使用str_replace()
,但每次都在不断变化。我还考虑过使用regex
,但无法弄清楚如何顺序进行替换。
任何帮助将不胜感激。
更多示例,
{{Fiona}} is a lucky {{girl}}.
将成为
Mike is a lucky man.
我在原始字符串中使用{{}}
作为标识符,以便于弄清楚需要替换的内容。如果这会造成问题,我愿意接受其他(更好)的解决方案。
答案 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);
}