POSIX 正規表現関数が PHP 5.3.0 から非推奨になっている

第11回■制御文字や不正な文字エンコーディングによるぜい弱性を知ろうという記事に、以下のような記述があったので、PHP マニュアルを調べていました。

PHPなどのマニュアルを見ても,関数ごとにバイナリ・セーフに関する説明がないからだ。ereg関数のリファレンスにも,eregがバイナリ・セーフでないことは説明されていない。

http://itpro.nikkeibp.co.jp/article/COLUMN/20090518/330215/?ST=security&P=2

その時に気付いたのですが、POSIX 正規表現関数(ereg(), ereg_replace(), split(), ...)が非推奨になっていました。マニュアルでは3ヶ月以上前に更新されていたようです。

PHP 5.3.0RC2 で確認してみたところ、E_DEPRECATED が発生しました。
POSIX 正規表現関数は preg_* や mb_ereg_* に置き換えていった方が良さそうです。

$ php -v
PHP 5.3.0RC2 (cli) (built: May  9 2009 08:27:20)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

$ php -r 'var_dump( ereg("a", "abc") );'
PHP Deprecated:  Function ereg() is deprecated in Command line code on line 1

Deprecated: Function ereg() is deprecated in Command line code on line 1
int(1)

ちなみに、冒頭の引用での記述については、以下のページに、POSIX 正規表現関数はバイナリセーフでないことが記載されています。個々の関数リファレンスにはバイナリセーフかどうかは載っていないので、記述が間違っているわけではありません。

これらの正規表現関数はバイナリセーフではありません。PCRE関数はバイナリセーフです。

http://php.net/intro.regex