Php Preg Replace仅对一个输入不起作用

Php Preg Replace仅对一个输入不起作用,php,regex,Php,Regex,我使用preg replace替换输出中的语法。这是我的密码: $input_val_Arr = array("ic"=>'8808295663', "promocodereply"=>'123456', "phone"=>'017123456789'); foreach($input_result as $row) { //eg of $row->input_title is promocod

我使用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\u msg内容是success

所以var_dump输出应该是成功的!123456017123456789 8808295663

然而,ic语法是不可替换的,这就是我得到的。成功123456017123456789

这里有什么问题?谢谢。

正则表达式很好。但是,$input\u结果数组只包含一个条目,其中$row->input\u title==是IC或其他内容。Ths将与正则表达式一起工作,但isset$input\u val\u Arr[$special\u key]失败。因为这不是不区分大小写的检查


你需要清理你的整个方法。多重检查是非常冗余的,而且变量名很糟糕。对于此任务,建议使用单个preg\u replace\u回调,只使用//i作为正则表达式。或者使用单个preg_replace调用,将数组作为主题和替换对象。

谢谢,在清理了整个方法之后,我发现代码中的if-else是罪魁祸首,并解决了问题。