現在の位置: ホーム> 最新記事一覧> mb_eregi_replaceの代わりにpreg_replace()を使用して、より複雑なユニコードマッチングを実現します

mb_eregi_replaceの代わりにpreg_replace()を使用して、より複雑なユニコードマッチングを実現します

M66 2025-06-02

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()が非推奨されるのですか?

MB_EREGI_REPLACE()は、マルチバイトストリングエクステンション(MBSTRING)のケースに依存しない通常の交換機能です。ただし、その問題は次のとおりです。

  • 構文は古く、Perlスタイルの規則性をサポートしていません。

  • パフォーマンスが悪い。

  • 最新のユニコード、制限された処理能力、および高いメンテナンスコスト。

したがって、よりモダンで機能が豊富なpreg_replace()を使用することをお勧めします。

mb_eregi_replace ()の代わりにpreg_replace ()を使用します

基本的な使用法

使用したとします:

 mb_eregi_replace("テスト", "交換する", $text);

このように書き換えることができます:

 preg_replace("/テスト/ui", "交換する", $text);

ここで、 Uモディファイアはユニコードモードをオンにすることを意味し、私は上限と小文字を無視することを意味します。

例:文字列の中国のキーワードを交換します

テキストの段落にあるすべての「リンゴ」を「バナナ」に置き換えたいと仮定し、ケース非感受性であるとします。

 $text = "私のお気に入りのリンゴ,とリンゴジュース。";
$result = preg_replace("/りんご/ui", "バナナ", $text);
echo $result;

出力:

 我最喜欢吃バナナ,还有バナナ汁。

例:URLから特定のUnicodeパラメーターを置き換えます

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正規表現の構文と機能についてさらに学ぶこともできます。