php preg_replace() 索引数组问题

php preg_replace() indexed array issue

这是程序:

$string = 'Inquiry {{inquiry:number}} is assigned to {{details_1}}';
$patterns = array();
$patterns[0] = '/({{)(.*)(}})/U';
$patterns[1] = '/({{)(.*)(}})/U';
$replacements = array();
$replacements[1] = 15;
$replacements[0] = 20;
ksort($patterns);
ksort($replacements);
echo preg_replace($patterns, $replacements, $string);

它应该给出输出:

Inquiry 20 is assigned to 15

但我得到的是:

Inquiry 20 is assigned to 20

我想知道 preg_replace 是否有问题?

注意:我正在尝试用相应的值替换 {{ .. }} 中的字符串,包括大括号。

那是因为替换是一个接一个地处理的 您的模式 #0 匹配 {{}} 中的所有内容,因此占位符和它们都被替换为您的替换 #0.

当模式 #1 被处理后,没有更多的 {{}} 剩余。

试试这个:

$string = 'Inquiry {{inquiry:number}} is assigned to {{details_1}}';
$patterns = array();
$patterns[0] = '/({{)(inquiry:number)(}})/U';
$patterns[1] = '/({{)(details_1)(}})/U';
$replacements = array();
$replacements[1] = 15;
$replacements[0] = 20;
ksort($patterns);
ksort($replacements);
echo preg_replace($patterns, $replacements, $string);
$replArray = array(
  '{{inquiry:number}}',
  '{{details_1}}'
);

$valueArray = array (15,20);
echo str_replace($replArray,$valueArray,$patern);

如果你想使用模板,你需要解析变量,并检查正确的队列,例如 {} - 这个正确,{{} - 不正确。

默认情况下,preg_replace 替换所有匹配项。只需将可选参数“limit”添加到您的脚本中,它就会起作用:

echo preg_replace( $patterns, $replacements, $string, 1 );