文字列処理にPHPを使用する場合、 MB_EREGI_REPLACE関数は私の一般的なツールの1つでした。この関数は、中国語などのマルチバイト文字を含むテキストを処理するのに非常に適したマルチバイト文字列の定期的なケース非感受性置換を実装できます。ただし、PHP 7.3+環境では、コードでMB_EREGI_REPLACEを使用すると警告やエラーさえも発生することが突然発見されました。私はこの機能が廃止されたと思っていましたが、後に私はそれを深く研究し、真実が事実ではないことを発見しました。
簡単に言えば、 MB_EREGI_REPLACEは、 MBSTRING拡張機能によって提供される関数であり、マルチバイト文字列の正規表現の検索置換を実行し、ケース非感受性です。
<?php
$original = "Hello World! hello world!";
$result = mb_eregi_replace("hello", "hi", $original);
echo $result; // 出力:hi World! hi world!
?>
この関数の関数は、特にケースマッチングが必要な場合、マルチバイト文字列処理で非常に役立ちます。
PHP 7.3以降では、 MB_EREGI_REPLACEは次のような警告を促します。
Deprecated: mb_eregi_replace(): This function is deprecated
これにより、多くの開発者(私を含む)は、PHPの役人がこの機能を非難していると誤って信じています。そのため、 MB_EREG_REPLACEを手動小文字で使用するか、代わりにpreg_replaceを使用するなど、他の代替品を使用しようとしました。
実際、PHP 7.3から始めて、 MB_EREGI_REPLACEが依存する基礎となる通常のエンジンが変更されました。 PHPの公式は、通常のエンジンをMbregexからPCRE(Perl互換性のある正規表現)に移行し、 MB_EREGI_REPLACE関数自体がMBREGEXに基づいて実装されているため、内部メカニズムが非推奨としてマークされますが、機能は依然として存在します。
つまり、
この機能は完全に削除されておらず、「将来放棄される可能性がある」と正式にマークされているだけであり、開発者に徐々に移行するように思い出させます。
これは、なぜ一部のPHPバージョンで利用可能なのかを説明していますが、警告を発します。
基礎となるMbregex通常のライブラリのメンテナンスステータスは劣化しており、もはや推奨されません。
MB_EREGI_REPLACEには放棄のリスクがあるため、次の代替案を使用することをお勧めします。
<?php
$original = "Hello 世界! hello 世界!";
$pattern = "/hello/u"; // u 修飾子はマルチバイトをサポートします,i 修飾子はケース非感受性です
$result = preg_replace($pattern . "i", "hi", $original);
echo $result; // 出力:hi 世界! hi 世界!
?>
ここでのポイントは次のとおりです。
U修飾子は、正規表現がUTF-8マルチバイトで処理されることを保証します。
Iモディファイアの実装はケースを無視します。
preg_replaceは、PHPが正式に推奨する最新の通常の交換機能です。
PHP 8.0には、 MB_STR_IREPLACEが追加されました。構文はシンプルです:
<?php
$original = "Hello 世界! hello 世界!";
$result = mb_str_ireplace("hello", "hi", $original);
echo $result; // 出力:hi 世界! hi 世界!
?>
これは、プロジェクトランタイム環境がPHP 8.0以上をサポートしている場合、最も簡単な代替手段です。
MB_EREGI_REPLACEは、実際にPHP 7.3+で非推奨としてマークされていますが、完全に除去されていません。
この放棄は、関数を直接削除するのではなく、基礎となる通常のエンジンスイッチングに由来します。
代わりに、 uおよびi修飾子を使用してpreg_replaceを使用することをお勧めします。
PHP 8.0以上にアップグレードできる場合は、 MB_STR_IREPLACEを使用してそれを置き換えることができます。
将来、PHPバージョンはMB_EREGI_REPLACEを完全に削除する可能性があり、コードが早ければ早いほど良いです。
この記事が、 MB_EREGI_REPLACEの現在の状況を明確にし、時代遅れの機能について盲目的に心配し、使用しないようにし、コードの近代性と安定性を維持するのに役立つことを願っています。