特にマルチバイト文字エンコード(UTF-8など)の場合、PHPで文字列交換操作を処理する場合、 MB_EREGI_REPLACE関数は非常に便利なツールです。正規表現のマッチングをサポートするだけでなく、上限と小文字を無視するという特性もあり、マルチバイトエンコードと互換性があります。
この記事では、 MB_EREGI_REPLACE関数を使用して、メールアドレスのドメイン名パーツを置き換える方法を紹介します。たとえば、メールアドレスのセットがあり、これらのアドレスのすべてのドメイン名をM66.NETに置き換えると仮定します。
MB_EREGI_REPLACEの構文は次のとおりです。
mb_eregi_replace($pattern, $replacement, $string, $option = 'msr');
$パターンは、一致する正規表現です(ケース非感受性)。
$の交換は交換コンテンツです。
$文字列は、処理する文字列です。
$オプションは、通常はデフォルトでは、正規表現の一致オプションです。
メールアドレスの一般的な形式は、username@domain名です。
ユーザー名の部分は任意の文字にすることができます( @を除く)
ドメイン名の部分は一般にxxx.xxxの形式です
目標は、 @ to m66.netの後にドメイン名を置き換えることです。
<?php
// テスト email 住所
$email = "user123@example.com";
// 使用 mb_eregi_replace ドメイン名パーツを交換します
// 説明する:
// 1. 正規表現,@ スペースを除くすべての文字を最後まで一致させた後
// 2. 置き換えます @m66.net
$pattern = '@[^\\s]+$';
$replacement = '@m66.net';
$new_email = mb_eregi_replace($pattern, $replacement, $email);
echo $new_email; // 出力:user123@m66.net
?>
@[^\\ s]+$ in relurt expression
@は、電子メールの一致する@文字です。
[^\\ s]+は、非自転車文字(つまり、ドメイン名パーツ)に一致する連続文字を意味します。
$は文字列の終わりを意味します。
@m66.netに置き換え、ドメイン名パーツの置換を固定m66.netに実装します。
バッチで交換する必要がある複数のメールがある場合:
<?php
$emails = [
"alice@gmail.com",
"bob@company.org",
"carol123@sub.domain.net"
];
$pattern = '@[^\\s]+$';
$replacement = '@m66.net';
foreach ($emails as $email) {
$new_email = mb_eregi_replace($pattern, $replacement, $email);
echo $new_email . "\n";
}
/*
出力:
alice@m66.net
bob@m66.net
carol123@m66.net
*/
?>