在 PHP 中处理字符串替换操作时,尤其是涉及到多字节字符编码(如 UTF-8)的时候,mb_eregi_replace 函数是一个非常有用的工具。它不仅支持正则表达式匹配,还具备忽略大小写的特性,并且兼容多字节编码。
本文将介绍如何使用 mb_eregi_replace 函数来替换 email 地址中的域名部分。比如,假设我们有一组 email 地址,我们想将这些地址中的域名全部替换成 m66.net。
mb_eregi_replace 的语法如下:
mb_eregi_replace($pattern, $replacement, $string, $option = 'msr');
$pattern 是要匹配的正则表达式(不区分大小写)。
$replacement 是替换的内容。
$string 是要处理的字符串。
$option 是正则表达式的匹配选项,通常默认即可。
Email 地址一般格式为 用户名@域名,其中:
用户名部分可以是任意字符(不含 @)
域名部分一般是 xxx.xxx 形式
目标是替换 @ 后面的域名为 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]+$
@ 是匹配 email 中的 @ 字符。
[^\\s]+ 表示匹配非空白字符的连续字符(即域名部分)。
$ 表示匹配字符串结尾。
替换为 @m66.net,实现将域名部分替换成固定的 m66.net。
如果有多个 email 需要批量替换:
<?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
*/
?>