2011-11-25 34 views
0

我使用preg替換來替換我的輸出中的語法。這裏是我的代碼:Preg替換不工作只有一個輸入

$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

正則表達式很好。但是,您的$input_result陣列僅包含一個條目,其中$row->input_title=="IC"或其他內容。這將與正則表達式一起工作,但失敗了isset($input_val_Arr[$special_key])。由於這不是一個不區分大小寫的檢查。

您需要清理整個方法。多重檢查非常多餘,變量名稱很糟糕。一個preg_replace_callback建議這個任務,只有/<(IC|PROMOCODEREPLY|PHONE)>/i作爲正則表達式。或者使用一個調用數組作爲主題和替換的preg_replace

+0

謝謝,清理整個方法後,我發現如果在我的代碼中是罪魁禍首,並解決問題。 – cyberfly