2011-11-30 70 views
0

這不起作用。我希望它用ralph替換數組值的每個共同保真度。相反,我得到$ data的未改變的值。任何洞察力爲什麼?preg_replace和數組不工作

$data="there is a dog in the car out back"; 

$bill= explode(' ',$data); 

$bob[0]="dog"; 
$bob[1]="car"; 
$bob[2]="back"; 

$qq = preg_replace("|($bob)|Ui", "ralph" , htmlspecialchars($data)); 

echo $qq; 

回答

0

使用這種方式:

$data="there is a dog in the car out back"; 

$bill= explode(' ',$data); 

$bob[0]="/dog/ui"; 
$bob[1]="/car/ui"; 
$bob[2]="/back/ui"; 

echo preg_replace($bob, "ralph", $data); 

你要通過正則表達式,你想用一個字符串或更換名單更換的名單。更多信息:http://php.net/manual/en/function.preg-replace.php

2

如果在字符串上下文"$bob"中內插一個類似$bob的數組,則它只會變成"Array"

在你需要implode再次作爲選擇列表中的最起碼:

$regex_bob = implode("|", $bob); // you should also apply preg_quote() 
# $regex_bob = "dog|car|back|..."; 

然後用更合理的正則表達式的分隔符(如|用於替代):

$qq = preg_replace("~($regex_bob)~Ui", "ralph" , htmlspecialchars($data)); 
+0

謝謝,所有回覆都有幫助。我感謝你的時間。 CC – cc3d

1

試試這個:

echo "|($bob)|Ui"; 

...而你會我看到了什麼問題。如果你只是把一個數組轉換成字符串,它導致被添加到字符串Array在字符串中 - 所以你正在執行的實際正則表達式是:

"|(Array)|Ui" 

你需要明確地告訴PHP 如何轉換的陣列爲一個字符串 - 在這種情況下,我建議你使用implode()

$expr = "/(".implode('|',$bob).")/Ui"; 
$qq = preg_replace($expr, "ralph" , htmlspecialchars($data)); 
// Should return "there is a ralph in the ralph out ralph" 

請注意,我也改變了分隔符/ - 這是因爲你需要在正則表達式字面上使用|,所以最好選擇另一個分隔符。