用于电子邮件解析而不是@到 - >的正则表达式公式(在)

时间:2018-01-18 09:45:56

标签: php regex parsing

以下是解析电子邮件文本的代码

<?php

 $res = preg_match_all(
    "/[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}/i",
    $text,
    $matches
  );

?>

但我必须将其重新修改为

不是

  

@

解析

  

(在)

如何修改正则表达式公式?

2 个答案:

答案 0 :(得分:1)

很简单:替换

@

\(at\)

$res = preg_match_all(
    "/[a-z0-9]+([_\.-][a-z0-9]+)*\(at\)([a-z0-9]+([\.-][a-z0-9]+)*)+\.[a-z]{2,}/i",
    $text,
    $matches
  );

请注意双重“反斜杠:

\\.

没有必要逃脱这一点。

相反,有必要逃避(),因为它们在正则表达式中为meta-characters

另外,正如评论中所建议的那样,您可以使用@(at)获得具有唯一正则表达式的电子邮件:

/[a-z0-9]+([_\.-][a-z0-9]+)*(@|\(at\))([a-z0-9]+([\.-][a-z0-9]+)*)+\.[a-z]{2,}/i

答案 1 :(得分:-1)

您可以使用filter_var方法,而不是使用RegEx查找电子邮件是否有效。

<?php
$email = "john.doe@example.com";

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
  echo("$email is a valid email address");
} else {
  echo("$email is not a valid email address");
}
?>

可以在w3schools

的教程中找到一个示例
相关问题