我有一个字符串可以这样说:
$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";
我应该在这方面做些什么改变?
答案 0 :(得分:2)
你提到的正则表达式只匹配第一个,因为它检查感叹号。
删除'!'所以它将取代所有。
#\s+\[num:(\d+)\]#ie
注意:但它不会删除'!'从字符串。另外检查\ s +不是一个好主意,因为如果字符串中的占位符之前没有包含空格,则正则表达式将会中断。
#\[num:(\d+)\]#ie