PHPテキスト処理の場合、 MB_EREGI_REPLACE()関数は、Multi-Byte文字列とケース非感受性置換をサポートするため、UTF-8エンコードされたテキストコンテンツの処理に特に適しています。この関数はPHPの新しいバージョンで放棄されていますが( MB_EREG_REPLACE()またはpreg_replace()を使用することをお勧めします)、一部のプロジェクトまたは特定の環境ではまだ使用法シナリオがあります。
この記事では、 MB_EREGI_REPLACE()関数を配列と組み合わせて使用する方法を紹介し、1対1の、多くの、または多くのテキスト置換戦略を実装します。
MB_EREGI_REPLACE()の基本的な構文は次のとおりです。
mb_eregi_replace(string $pattern, string $replacement, string $string, string $option = "msr")
$パターン:正規表現パターン
$の交換:コンテンツを交換します
$文字列:ターゲット文字列
$オプション:一致オプション(省略できます)
このような交換ロジックを実装したいとします。
すべてのリンクを「http://」または「https://」プレフィックスを[リンク]に置き換えます
テキストの「テスト」や「例」などのすべての単語を「例」に置き換えます
「Apple」→「Apple」、「Google」→「Google」などの複数のキーワードを交換してください
配列を使用してこれらのルールを組み合わせて、 array_map()またはループを使用して置換を順次実行できます。
MB_EREGI_REPLACE()を使用してアレイを使用して複雑なテキスト置換を実装する方法を示す完全な例を示します。
<?php
// 元のテキスト
$text = <<<TEXT
これはテストテキストです,リンクを含めます:http://m66.net/page そして https://m66.net/example。
加えて,また、いくつかのブランドワードも含まれています,アップルのように、グーグル,いくつかの例があります。
TEXT;
// ルール配列を交換します:キーはモードです,値は交換コンテンツです
$replace_rules = [
// リンクマッチ,置き換えます [リンク]
'(http|https)://m66\.net/[a-zA-Z0-9/_\-]+' => '[リンク]',
// テストまたは例 → 例
'テスト|例' => '例',
// ブランド交換
'りんご' => 'Apple',
'グーグル' => 'Google'
];
// マルチモード交換を実行します
foreach ($replace_rules as $pattern => $replacement) {
$text = mb_eregi_replace($pattern, $replacement, $text);
}
// 出力処理結果
echo nl2br($text);
这是一个例文本,リンクを含めます:[リンク] そして [リンク]。
加えて,また、いくつかのブランドワードも含まれています,のように Apple、Google,还有一些例内容。
パフォーマンスの問題:多数の交換が行われた場合、 MB_EREGI_REPLACE()へのループコールがパフォーマンスの負担をもたらします。ルールを1回限りの交換でマージするか、 preg_replace()の配列バージョンを使用することを検討できます。
エスケープキャラクター:正規表現パターンを構築するとき、シンボルのように。 、 /などは正しく逃げる必要があります。
通常の互換性: MB_EREGI_REPLACE()はマルチバイトセーフですが、Perl互換性のある規則性をサポートしていません。複雑なモード処理にpreg_replace()を使用することをお勧めします。
MB_EREG_REPLACE()はPHP 7.3の後に放棄されたため、推奨されるアプローチはMB_EREG_REPLACE() (Case Sensive)またはpreg_replace() (より強力)を使用することです。例えば:
$text = preg_replace(array_keys($replace_rules), array_values($replace_rules), $text);
これにより、交換がより簡潔で実行がより効率的になります。
交換ルールを配列に抽象化することにより、 MB_EREGI_REPLACE()を使用してマルチルールバッチテキストの交換をすばやく実装できます。このモデルは、シンプルなコンテンツクリーニング、キーワードの交換、コンテンツ保護、その他のシナリオに特に適しています。この機能は徐々に非推奨ですが、そのアイデアは、効率的で柔軟なテキスト処理を実現するために、新しい機能または他の言語に移動することができます。