0

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

$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";

我应该对此做出什么改变?

4

1 回答 1

2

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

去除那个 '!' 这样它将取代所有。

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

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

#\[num:(\d+)\]#ie
于 2012-07-11T05:04:18.907 回答