2011-11-30 44 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" 

请注意,我也改变了分隔符/ - 这是因为你需要在正则表达式字面上使用|,所以最好选择另一个分隔符。