脱力系備忘録BloG ホーム »[PHP] preg_replace 後方参照でちょっと悩んだ

[PHP] preg_replace 後方参照でちょっと悩んだ  

強力な正規表現が使えるPHPの関数「preg_replace」で、後方参照を使おうとしたらちょっと悩んだのでメモ。

後方参照とは正規表現の機能の一つで、括弧「()」で括った内容が一時的にバッファに記憶され、その内容を後で使えるというもの。
置換処理でよく使います。
たとえば、

何らかの文字列-500 を 何らかの文字列-800 に変換したい場合、

preg_replace("/(何らかの文字列にマッチする正規表現)-500/", "$1-800", 文字列);

このように、「何らかの文字列にマッチする正規表現」を「()」で括り、replacement部に「$1」としてやると、$1の部分に()で括った内容が入るわけです。
「()」の数を増やせば、$1,$2,$3・・・と使えます。

で、今回悩んだのは、「$1」の直後に数字が来る場合です。

何らかの文字列500 を 何らかの文字列800 の場合、先ほどは間に「-」がありましたが今回は直後に数字が来ます。つまり、

preg_replace("/(何らかの文字列にマッチする正規表現)500/", "$1800", 文字列);

こうなる。
でも、これでは「$1」なのか「$18」なのかわかりません。
で、PHPマニュアルを見ると「\${1}」としなさいと書いている。
なるほど。
PHPなので、「{$1}」とやりがちだけどそれは間違い。
それと、ちょっと注意なのは、replacement部の括りがダブルクォーテーションなのかシングルクォーテーションなのかで「\」の有無が変わってくる。

おさらい。

preg_replace("/(何らかの文字列にマッチする正規表現)500/", "\${1}800", 文字列);
preg_replace("/(何らかの文字列にマッチする正規表現)500/", '${1}800', 文字列);

です。
違いは良く見てね。
なお、直後が数字でない場合はダブルクォーテーションの場合でも「\」はいらない。

preg_replace("/(何らかの文字列にマッチする正規表現)500/", "$1EightHundred", 文字列);
関連記事

category: PHP

この記事へのコメント

コメントの投稿

非公開コメント

コメントは全て管理人が内容を確認してから表示されます(非公開コメント除く)。
内容によっては表示されない場合がありますことご了承願います。

プロフィール

お問い合わせ

最新記事

最新コメント

▲ Pagetop