php preg_replace()索引数组问题

时间:2016-03-22 10:51:55

标签: php regex preg-replace

这是该计划:

$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的问题吗?

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

3 个答案:

答案 0 :(得分:3)

$replArray = array(
  '{{inquiry:number}}',
  '{{details_1}}'
);

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

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

答案 1 :(得分:3)

默认情况下,preg_replace会替换所有匹配项。只需在脚本中添加可选参数“limit”即可:

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

答案 2 :(得分:2)

那是因为替换是一个接一个地处理的  你的模式#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);