PHP:preg_match()等でマッチした前後の文字列

最終更新日時:2017-02-24 18:12:29
PHP

タイトルの通りです。

 preg_match('/cd/', 'abcdefg', $m);


例えば上記を実行した際に、当然 $m[0] には "cd" が入りますが、前後の文字列 "ab", "efg" も別途取得したいといった話です。
いわゆるパース処理をする際には必要になりますね。

例えば Perl であれば、、

 $`  マッチした部分よりも前の部分が格納される
 $'  マッチした部分よりも後の部分が格納される


上記のような便利な参照変数があります。
このような変数は PHP には無いんですかね。。。


対応策


調べてみた感じでは無さそうに見えるので、仕方がないので以下のように泥臭く対応しました(/_\*)

 preg_match('/^(.*)(cd)(.*)$/', 'abcdefg', $m);


単に、マッチさせたい文字列そのものを挟んで、前後の文字列も後方参照させるだけです(/_\*)
結果はもちろんこうなります。

 Array
 (
     [0] => abcdefg
     [1] => ab
     [2] => cd
     [3] => efg
 )


もっと良い方法ないですかね。。。。

お問い合わせは 掲示板 にて。