PHP 7.0以降では、 MB_EREGI_REPLACE()は公式に廃止され、PHP 7.1の後に完全に除去されました。これにより、マルチバイト文字列の定期的な交換に依存している多くの開発者が悩まされています。特に、ユニコード文字列(中国語、日本など)のケースに依存しない交換が必要な場合、同等でより強力な代替手段を見つけることが特に重要です。
幸いなことに、PHPのpreg_replace()関数は、正しい修飾子およびUnicodeサポートと組み合わせて、 mb_eregi_replace()以上の実装を可能にします。この記事では、MB_EREGI_REPLACE( )をPREG_REPLACE()に完全に置き換え、強力なUnicodeの通常のマッチングを実装する方法を徐々に紹介します。
MB_EREGI_REPLACE()は、マルチバイトストリングエクステンション(MBSTRING)のケースに依存しない通常の交換機能です。ただし、その問題は次のとおりです。
構文は古く、Perlスタイルの規則性をサポートしていません。
パフォーマンスが悪い。
最新のユニコード、制限された処理能力、および高いメンテナンスコスト。
したがって、よりモダンで機能が豊富なpreg_replace()を使用することをお勧めします。
使用したとします:
mb_eregi_replace("テスト", "交換する", $text);
このように書き換えることができます:
preg_replace("/テスト/ui", "交換する", $text);
ここで、 Uモディファイアはユニコードモードをオンにすることを意味し、私は上限と小文字を無視することを意味します。
テキストの段落にあるすべての「リンゴ」を「バナナ」に置き換えたいと仮定し、ケース非感受性であるとします。
$text = "私のお気に入りのリンゴ,とリンゴジュース。";
$result = preg_replace("/りんご/ui", "バナナ", $text);
echo $result;
出力:
我最喜欢吃バナナ,还有バナナ汁。
URL(中国のタグなど)のUnicodeパラメーターを置き換えることを検討してください。
$url = "https://m66.net/search?q=りんご手机";
$replaced = preg_replace("/りんご/ui", "バナナ", $url);
echo $replaced;
出力:
https://m66.net/search?q=バナナ手机
ご覧のとおり、 preg_replace()はUnicodeを含むURLを処理することもできます。
「Apple Phone」、「Apple Computer」、「Apple Pie」など、より多くのバリエーションを一致させたい場合は、より複雑な正規表現を使用できます。
$text = "我有一台りんごコンピューター,也吃了りんごグループ。";
$pattern = "/りんご(コンピューター|グループ)?/ui";
$replacement = "バナナ";
$result = preg_replace($pattern, $replacement, $text);
echo $result;
出力:
我有一台バナナ,也吃了バナナ。
Unicodeモードを有効にするために、 Uモディファイアを追加することを常に忘れないでください。
preg_replace()は、より複雑な通常の構文(アサーション、名前のグループなど)をサポートし、 MB_EREGI_REPLACE()よりも柔軟性があります。
交換コンテンツにバックスラッシュ( \ )またはドル記号( $ )が含まれている場合、 preg_quote()または二重引用符のエスケーププロセスを使用します。
非推奨MB_EREGI_REPLACE()は不快になる可能性がありますが、 preg_replace()は完璧な代替として機能するだけでなく、より強力なUnicode定期的なサポートも提供します。 UおよびIモディファイヤーの使用を習得している限り、マルチバイトの文字置換要件を簡単に処理できます。
より複雑なユニコードパターンマッチングに対処する必要がある場合は、PHPの通常の世界でより多くの可能性を解き放つために、PCRE正規表現の構文と機能についてさらに学ぶこともできます。