PHP:preg_match()等でマッチした前後の文字列
最終更新日時:2017-02-24 18:12:29
PHP
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 )
もっと良い方法ないですかね。。。。