我使用preg replace来替换输出中的语法。这是我的代码:
$input_val_Arr = array("ic"=>'8808295663',
"promocodereply"=>'123456',
"phone"=>'017123456789');
foreach($input_result as $row)
{
//eg of $row->input_title is promocodereply, phone, ic
$special_key = $row->input_title;
$rule = "/<".$row->input_title.">/i";
//if(preg_match('/promocodereply/i', $success_msg))
if(preg_match($rule, $success_msg))
{
if(isset($input_val_Arr[$special_key]))
{
//$success_msg = preg_replace('/<promocodereply>/i', '123456', $success_msg);
$success_msg = preg_replace($rule, $input_val_Arr[$special_key], $success_msg);
}
}
}
var_dump($success_msg);
$ success_msg内容为Success! <PROMOCODEREPLY> <PHONE> <IC>
所以var_dump输出应该是成功! 123456 017123456789 8808295663
然而,ic语法不是替换,这就是我得到的。 Success! 123456 017123456789 <IC>
这是什么问题?感谢。
答案 0 :(得分:0)
正则表达式很好。但是,您的$input_result
数组只包含$row->input_title==
为"IC"
的条目。这将与正则表达式一起使用,但isset($input_val_Arr[$special_key])
失败。因为那不是一个不区分大小写的检查。
您需要清理整个方法。多次检查非常冗余,变量名称很糟糕。对于此任务,建议使用单个preg_replace_callback
,仅使用/<(IC|PROMOCODEREPLY|PHONE)>/i
作为正则表达式。或者使用单个preg_replace
调用数组作为主题和替换。