在PHP中,按字符串顺序将随机值替换为特定值
假设我有一个字符串:在PHP中,按字符串顺序将随机值替换为特定值,php,regex,string,Php,Regex,String,假设我有一个字符串: {{Hi}}, This {{is}} {{Debby}}. 我想用传递给函数的变量替换{{ANYTHING}中的文本。例如,如果函数为change\u values('Hola','was','Antonio') 结果将是: Hola, This was Antonio. 由{{}}包围的第一个单词或字符被change\u values()的第一个参数替换。类似地,第二个单词或字符被第二个参数替换,依此类推 需要明确的是,值Hi,为和Debby可以更改。传递的参数也可
{{Hi}}, This {{is}} {{Debby}}.
我想用传递给函数的变量替换{{ANYTHING}
中的文本。例如,如果函数为change\u values('Hola','was','Antonio')
结果将是:
Hola, This was Antonio.
由{{}}
包围的第一个单词或字符被change\u values()
的第一个参数替换。类似地,第二个单词或字符被第二个参数替换,依此类推
需要明确的是,值Hi
,为和Debby
可以更改。传递的参数也可以更改。唯一一致的是第一个{{}}
将被第一个参数替换,依此类推
我原本打算使用str_replace()
,但每次文本都在不断变化。我还考虑过使用regex
,但不知道如何按顺序进行替换
任何帮助都将不胜感激
再举几个例子
{{Fiona}} is a lucky {{girl}}.
将成为
Mike is a lucky man.
我在原始字符串中使用{{}
作为标识符,以便于找出需要替换的内容。如果这会产生问题,我愿意接受其他(更好的)解决方案。如果您使用的是PHP5.6或更高版本,此函数将满足您的需要。它用于将所有替换项打包到一个数组中,然后用替换项替换{
和}
包围的所有字符串。通过使用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.
如果您可以将查找和替换值定义为关联数组。谢谢@WiktorStribiżew,我将尝试一下。:)有一个问题,它使用关联数组修复了原始字符串中的值。
$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);
}