PHP開発では、文字列置換が一般的な要件です。特に多言語またはマルチバイトのキャラクターでは、 MB_EREGI_REPLACE関数は、マルチバイトキャラクターとケース感受性のマッチングを適切にサポートするため、非常に実用的なツールになります。
この記事では、 MB_EREGI_REPLACE関数を使用して、文字列のPHP変数を扱う方法について説明しますが、二重引用符や巻き毛の装具ではありません。交換操作で変数を安全に使用する方法を示します。
PHPでは、通常、可変解析は、二重引用符で見られる文字列または巻き毛の装具で発生します。
echo "Hello $name"; // 変数は解析されます
echo "Hello {$name}"; // 変数も解析されます
ただし、文字列が二重引用符で囲まれていない場合、または変数が巻き毛のブレースに包まれていない場合、解析は有効になりません。
echo 'Hello $name'; // 出力:Hello $name(変数は解析されません)
echo 'Hello '.$name; // 正しい,変数はスプライシングとして解析されます
これをMB_EREGI_REPLACEに置き換えると、変数が交換用テンプレートに表示され、正しく処理されない場合、変数名を通常の文字列として扱うか、一致する結果が正しくありません。
MB_EREGI_REPLACEは、PHPのマルチバイトストリング関数ファミリーの定期的なケースに依存しない置換をサポートする関数です。関数定義は次のとおりです。
string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
$パターン:正規表現パターン、ケース非感受性。
$の交換:変数を含むことができる文字列を交換します。
$文字列:ターゲット文字列。
$オプション:オプションを一致させる、デフォルトの「MSR」 。
文字列内の$ varname変数を実際の値に置き換えると仮定しますが、元の文字列は、次のような二重引用符や巻き毛のブレースで変数を包みません。
$content = "これは変数です$varNameテスト";
「M66.net」などの特定の値として$ varnameをMB_EREGI_REPLACEに置き換える場合は、直接書き込みます。
$replacement = "m66.net";
mb_eregi_replace('\$varName', $replacement, $content);
ここでは、\ $ varnameは、正規表現のリテラル$ varnameであり、 m66.netに置き換えられます。 $は規則的に逃げる必要があることに注意してください。
<?php
// ターゲット文字列,二重引用符で包まれていない変数
$content = '私たちのサイトにアクセスしてください:$siteName,よりエキサイティングなコンテンツを体験してください!';
// 交換する必要がある変数名(リテラル)
$pattern = '\$siteName';
// 交換の実際の値
$replacement = 'm66.net';
// 使用mb_eregi_replace交換します,ケースを無視します
$newContent = mb_eregi_replace($pattern, $replacement, $content);
// 出力替换结果
echo $newContent;
?>
出力結果:
私たちのサイトにアクセスしてください:m66.net,よりエキサイティングなコンテンツを体験してください!
通常のエスケープ:文字列の$シンボルを一致させるので、正規表現に\ $を記述する必要があります。
可変交換:交換文字列は任意の値にすることができます。または、変数で動的に渡すことができます。
二重引用符や巻き毛のブレースのないシナリオ:リテラル変数名を直接一致させて、ミスマッチを避けます。
マルチバイトサポート: MB_EREGI_REPLACEは、中国の交換ニーズに適したUTF-8およびその他のエンコーディングを完全にサポートしています。
ターゲット文字列に未装飾されていないPHP変数(二重引用符や巻き毛のブレースのない$ varなど)が含まれている場合、 MB_EREGI_REPLACEはリテラル変数名を一致させることで置き換えることができます。
正規表現、特に使用する際の$シンボルの脱出に注意してください。
交換コンテンツは、変数に直接置き換えることができ、動的な柔軟性を確保できます。
MB_EREGI_REPLACEは、マルチバイト環境でのケースに依存しない交換に適しています。