PHPの正規表現はざっくりpreg_match系とmb_ereg系の2種類があります。
前者の実体はPerl正規表現のOSS互換ライブラリPerl Compatible Regular Expressionsであり、後者の実体はK.KosakoによるOSSライブラリonigurumaです。
どうしてわざわざ2種類の正規表現エンジンを搭載しているのかはよくわかりません。
どうもPCREはかつてマルチバイトに弱かったので、そちらに強いonigurumaに一日の長があったとかなんとか。
さて後者のoniguruma、なんと2025/04/24にメンテナンス終了してしまいました。
これはつまり、これ以上onigurumaを使い続けるのは不味いということです。
有名なライブラリということでforkも存在しますが、その中で最も有望だったOnigmoもほとんど開発が止まっており、今後の展望は見込めません。
ということでoniguruma系の今後は見通しがよくないことになっています。
ちなみにRubyは現在Onigmoを使っていますが、なんと自力で作りなおすことにしたそうです。
はてさてどうなることでしょう。
PHPメーリングリストでは、onigurumaを自前でforkするかPHPに同梱するかといった議論の結果、最終的にサポートを削除することに決定しました。
PHP8.6でE_DEPRECATED、PHP9では関数が存在しないエラーになります。
もしプロジェクトがeregでひっかかるようなら、今のうちにPCREへの移行を行いましょう。
PCREとonigurumaの正規表現は微妙に異なるみたいなのですが、そのあたりがまとまってるサイトが見当たらなかったのでよくわかりません。
ただまあ普通の書き方をしている程度なら違いに引っかかることはないでしょうし、違いに引っかかるような書き方をしている程度の人なら自力で移植もできるでしょう。
たぶん。
以下は該当のRFC、Oniguruma maintenance end and end of mbregexの紹介です。
提出者は@youkidearitaiです。
Oniguruma maintenance end and end of mbregex
Introduction
Onigurumaのメンテナンスが2025年4月24日に終了しました。
PHPはmb_ereg_xxx関数でmbregex関数を使用しています。
そこで、今後の方針を決めなければなりません。
このRFCでは、PHP8.6でmbregexを非推奨とし、PHP9.0で削除します。
Proposal
PHP8.6でmbregexが非推奨になり、PHP9.0で削除されます。
Deprecated: Function mb_ereg_replace() is deprecated since 8.6, Oniguruma functions support ends PHP 9.0 in %s on line %d
また、PHP8.2-8.5のメンテナンスバージョンについてはどうするかも方針決定が必要です。
FreeBSDは2026年12月1日にサポート終了することを決定しました。
PHPソースコードのCIに影響するため、サポート終了後の対応について決める必要があります。
Drop the following mbregex functions
以下の関数が使えなくなります。
mb_ereg
mb_ereg_match
mb_ereg_replace
mb_ereg_replace_callback
mb_ereg_search
mb_ereg_search_getpos
mb_ereg_search_getregs
mb_ereg_search_init
mb_ereg_search_pos
mb_ereg_search_regs
mb_ereg_search_setpos
mb_eregi
mb_eregi_replace
mb_regex_encoding
mb_regex_set_options
mb_split
Constants
定数MB_ONIGURUMA_VERSIONが削除されます。
php.ini options
INI設定mbstring.regex_retry_limit・mbstring.regex_stack_limitが削除されます。
Forked from Oniguruma
RubyはOnigurumaのfork、Onigmoを使用しています。
ただしOnigurumaとOnigmoは、一部の挙動が異なります。
External packaging for mb_onig
このRFCは、UTF-8以外のマルチバイトを使用するユーザにおそらく大きな影響を与えます。
そこで、今後もmb_ereg関数を引き続き利用できるように拡張機能を作成しました。
PHP 8.x
./configure --enable-mbstring --disable-mbregex
make
make install
pie install mb_onig/mb_onig
PHP 9
./configure --enable-mbstring
make
make install
pie install mb_onig/mb_onig
Backward Incompatible Changes
互換性のない変更点。
mbregexが使えなくなります。
Proposed PHP Version(s)
PHP8.6で非推奨、PHP9.0で削除。
Open Issues
Voting Choices
2026/04/25までの投票。
賛成24反対0の全員一致で採用されました。
References
感想
そんなわけで今後PHPの正規表現はPCREに一本化されます。
PCREは現在も活動が活発であり、当面終了する気配はありません。
個人的にはずっと前からpreg_xxxしか使ってないのでほぼ影響ありませんが、宗教上の理由やその他の理由でmb_eregばかり使っていた場合は移行をがんばりましょう。
単純な移行はRectorとか使えば勝手にやってくれると思いますが、挙動が異なる可能性のある正規表現を抽出してくれる移行支援ツールみたいなのは実際ほしいところですね。