PHP在字符串中搜索电子邮件地址

PHP在字符串中搜索电子邮件地址,php,regex,Php,Regex,嗨,我正在尝试搜索一个字符串,看看它是否包含电子邮件地址,然后返回它 一个典型的电子邮件或表达式是: eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email); 但是,如果在字符串中,我将如何搜索,例如,在字符串中返回电子邮件地址: “嗨,我的名字是乔,我可以通过joe@mysite.com.我也在推特上。” 我有点困惑,我知道我可以搜索它是否存在,周围有\b,但如何返回找到的内

嗨,我正在尝试搜索一个字符串,看看它是否包含电子邮件地址,然后返回它

一个典型的电子邮件或表达式是:

eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email);
但是,如果在字符串中,我将如何搜索,例如,在字符串中返回电子邮件地址:

“嗨,我的名字是乔,我可以通过joe@mysite.com.我也在推特上。”

我有点困惑,我知道我可以搜索它是否存在,周围有\b,但如何返回找到的内容

谢谢。

您可以使用,它会将它输出到一个数组以供使用

$content = "Hi my name is Joe, I can be contacted at joe@mysite.com. I am also on Twitter.";
preg_match("/[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})/i", $content, $matches);

print $matches[0]; // joe@mysite.com

添加$regs作为最后一个参数:

eregi("...", $email, $regs);

用于提取地址规范的更好PCRE是:

 /[a-z0-9\._%+!$&*=^|~#%'`?{}/\-]+@([a-z0-9\-]+\.){1,}([a-z]{2,6})/
但如果您真的想提取RFC 2822,则需要以下内容:

 /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/

C.

顺便说一句,该表达式是不正确的。首先点击“电子邮件地址正则表达式”:可能是的重复项。请注意,在这种情况下,您需要从模式的开头和结尾删除“^”和“$”-“^”表示匹配字符串的开头,而“$”表示匹配字符串的结尾,因此它不会找到“匹配项”除非电子邮件是整个字符串。要搜索包含的电子邮件地址,您可以将:“^[[U a-z0-9-]+(\.[U a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3}$”更改为“[[U a-z0-9-]+(\.[U a-z0-9-]+)*@[a-z0 9-]+)*(\.[a-z0-9-])(\.[a-z0-9-])(\.[a-z0-9-])*)(\.[a-z]])3])我决定将指针带上,谢谢Joobosis,记住接受你认为有用的答案。我将模式更改为
“/[[u a-z0-9-]+(?:\.[u a-z0-9-]+)*@[a-z0-9-]+(?:\.[a-z0-9-]+)*(?:\.[a-z]{2,3})/I”
,以便只获得电子邮件匹配项。没有
?:
在组的开头,regexp还返回组匹配的数组。@bumbu that rocked。。!!感谢您提供了完美的正则表达式。请注意,
eregi
已被长期禁止使用。乔纳森·桑普森的答案更好!