匹配多个电子邮件ID格式的PHP正则表达式
我正在尝试使用正则表达式获取电子邮件ID的本地部分。 这里的挑战是,本地部分有两种不同的格式,我需要找出我正在阅读的格式,并准备该电子邮件ID的替代形式。正如往常一样,我的代码片段粘贴在下面匹配多个电子邮件ID格式的PHP正则表达式,php,regex,Php,Regex,我正在尝试使用正则表达式获取电子邮件ID的本地部分。 这里的挑战是,本地部分有两种不同的格式,我需要找出我正在阅读的格式,并准备该电子邮件ID的替代形式。正如往常一样,我的代码片段粘贴在下面 $testarray = array("user1@gmail.com", "user2.tp@gmail.com", "user3@gmail.com", "user4.tp@gmail.com", "user5.tp@gmail.com"); foreach($testarray as $emailI
$testarray = array("user1@gmail.com", "user2.tp@gmail.com", "user3@gmail.com", "user4.tp@gmail.com", "user5.tp@gmail.com");
foreach($testarray as $emailID) {
preg_match("/([\w\d]*)\.([\w\d]*)@gmail.com/", $emailID, $match);
if ($match[2] == "tp") {
$altform = $match[1] . "@gmail.com";
} else {
$altform = $match[1] . ".tp@gmail.com";
}
error_log("ALTERNATE FORM OF $emailID IS $altform");
}
我在这里面临的问题是,我没有得到期望的结果,因为
$match[1]
和$match[2]
都没有为匹配任何内容。”user1@gmail.com“
您需要在点+字字符子模式周围使用可选组,然后在执行搜索后检查组是否匹配:
foreach($testarray as $emailID) {
$altform = "";
if (preg_match("/(\w+)(?:\.(\w+))?@gmail\.com/", $emailID, $match))
{
if (!empty($match[2]) && $match[2] == "tp") {
$altform = $match[1] . "@gmail.com";
} else {
$altform = $match[1] . ".tp@gmail.com";
}
}
print_r("ALTERNATE FORM OF $emailID IS $altform\n");
}
看
图案注释:
-捕获组1:一个或多个单词字符(\w+)
-1或0次出现(由于(?:\.(\w+))
量词):?
-一个点\。
-捕获组2:一个或多个单词字符(\w+)
-文本字符串@gmail\.com
(注意@gmail.com
被转义以匹配文本点)
\。
字符,在尝试使用$match