Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配多个电子邮件ID格式的PHP正则表达式_Php_Regex - Fatal编程技术网

匹配多个电子邮件ID格式的PHP正则表达式

匹配多个电子邮件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

我正在尝试使用正则表达式获取电子邮件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 $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");
}

图案注释

  • (\w+)
    -捕获组1:一个或多个单词字符
  • (?:\.(\w+))
    -1或0次出现(由于
    量词):
    • \。
      -一个点
    • (\w+)
      -捕获组2:一个或多个单词字符
  • @gmail\.com
    -文本字符串
    @gmail.com
    (注意
    被转义以匹配文本点)

请共享所需结果我们的正则表达式需要一个句号
\。
字符,在尝试使用
$match