PHP5.3以降で「Deprecated(非推奨)」となっている「ereg」関数を「preg_match」関数に変更してエラーを消す方法

PHP

「あるWordPressテーマをカスタマイズして欲しい」という依頼がありまして、まずはテスト環境を作っていたんですが、そのテーマファイル内の記述で「ereg」を使っている箇所がありました。

「ereg」は正規表現による大文字小文字を区別してマッチングを行うPHP関数で、私個人的には現在ではあまり使用される場面を見なくなっていました。PHP: ereg – Manualにも、

この関数は PHP 5.3.0 で 非推奨となりました。 この機能を使用しないことを強く推奨します。

って書いてもありますしね。WordPressのデバッグモードをONにしていたので、

Deprecated: Function ereg() is deprecated in なんとかかんとか

と、表示されて気づいたって感じです。デバッグモード、まじで便利。おすすめ!PHP: ereg – Manualには、

ereg() は PHP 5.3.0 以降で非推奨になりました。この関数のかわりに preg_match() を使うことを推奨します。

とも書かれていますので、今回は非推奨となっている「ereg」関数の代わりに「preg_match」関数を使う方法を書きました。

「ereg」を使わず「preg_match」を使う

では早速~。例えば下のような使い方をしている場合です。

if ( ereg("\.php$", $file) ) {

「preg_match」を使うと、

if ( preg_match("/\.php$/", $file) ) {

という感じです。やっていることは単純で「ereg」を「preg_match」に変更して、正規表現の記述「\.php$」をデリミタ「/」などで囲めばOKです。

おまけ:「eregi」を使わず「preg_match」を使う

他にも似たような関数で「eregi」があって、これもPHP5.3以降では非推奨のようです。(参考:PHP: eregi – Manual)ちなみに「ereg」と「eregi」の違いは、大文字と小文字を区別してマッチングを行うかどうかなので、例えば、

if ( eregi("\.php$", $file) ) {

とあったら、

if ( preg_match("/\.php$/i", $file) ) {

としてあげるとOKです。デリミタの後に「i」を入れることで、大文字と小文字を区別させずにマッチングを行ってくれます。

細かいことですけど、今回使うことがありましたので書きました。もし似たような場面に出会った際には、この記事を思い出して活用いただけますと幸いです。

著者:bouya Imamura