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' の対応する配列内の名前に置き換えることです

最初の試合では完璧に機能しますが、2 番目の試合ではまったく機能しません。つまり、この後、私が得る出力は次のとおりです。

$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 に答える