如何使用PHP只获取电子邮件地址?

时间:2015-08-12 07:44:46

标签: php regex

请问你如何在php中做到这一点......

如何只获得 test@gmail.com ...

Username <testmail@gmail.com>

testmail@gmail.com 

用户名和&lt;&gt;被删除...

3 个答案:

答案 0 :(得分:1)

根据您的要求,您可以使用substr功能,如下所示:

$string = 'Username <testmail@gmail.com>';
$opening = strpos($string, '<')+1;
$closing = strpos($string, '>');  
echo substr($string, $opening, $closing-$opening);

希望这有帮助。

答案 1 :(得分:0)

电子邮件地址实际上已经退出复杂的野兽。

如果主题文字没什么特别的话,你可以保持简单。

简单方法

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}\b
  • 使用此版本以随机文档和文本搜索电子邮件地址。
  • 使用IP地址而不是域名与电子邮件地址不匹配。
  • 与超过4个字母(例如.museum)的新奇顶级域名上的电子邮件地址不匹配。在将正则表达式应用于随机文档时,包括这些会增加误报的风险。
  • 要求“不区分大小写”选项为ON。

根据RFC 2822发送电子邮件地址

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

此正则表达式实现了电子邮件地址的官方RFC 2822标准。不建议在实际应用程序中使用此正则表达式。它表明,使用正则表达式总是在精确和实际之间进行权衡。

注意这两个正则表达式都来自RegexBuddy库

答案 2 :(得分:0)

没有通常预防措施的一种快捷方法是使用以下功能:

function _stringExtractEmail( $x ) {

    return( substr( $x , strpos( $x , '<' ) + 1 , -1 ) ) ;

}

// Example
print( _stringExtractEmail( 'Zafar Iqbal <mail@zaf.io>' ) ) ;

注意substr函数中的'-1',它只是砍掉最后一个字符,无论它是什么。