这是该计划:
$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 :(得分: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);