php多个preg替换单个字符串

时间:2012-07-11 04:43:54

标签: php regex string preg-replace

我有一个字符串可以这样说:

$string="Hi! [num:0] with [num:1]";

和这样的数组:

$array[0]=array('name'=>"na","id"=>22);
$array[1]=array('name'=>"nam","id"=>19);

现在,当我尝试使用preg_replace()替换此字符串时,这样:

$string=preg_replace('#\!\s+\[num:(\d+)\]#ie','.$array[\1]["name"]',$string);

我在替换中尝试执行此操作的是搜索模式[num:x]然后将其替换为键'x'的相应数组中的名称

它适用于第一场比赛,但根本不适用于第二场比赛。这意味着在此之后我获得的输出是:

$string="Hi! na with [num:1]";

虽然我想要的应该是:

$string="Hi! na with nam";

我应该在这方面做些什么改变?

1 个答案:

答案 0 :(得分:2)

你提到的正则表达式只匹配第一个,因为它检查感叹号。

删除'!'所以它将取代所有。

#\s+\[num:(\d+)\]#ie

注意:但它不会删除'!'从字符串。另外检查\ s +不是一个好主意,因为如果字符串中的占位符之前没有包含空格,则正则表达式将会中断。

#\[num:(\d+)\]#ie