2011-09-12 80 views

回答

10

如果你能确保该字符串格式是一致的,一个简单的正则表达式会做的伎俩:

$input = 'Fname Lname<[email protected]>'; 
preg_match('~<(.*?)>~', $input, $output); 
$email = $output[1]; 
+0

var_dump($ output)results array(0){} – AssamGuy

1

使用功能,如字符串和爆炸(比正则表达式更简单的方法,并会做的伎俩) :

<?php 
$text = 'Fname Lname<[email protected]>'; 
$pieces = explode('<',$text); 
$mail=substr($pieces[1],0,-1); 
echo $mail; 
?> 
0

这应该打印E-mail地址:

if (preg_match("/<\S*>/", $subject, $matches)) { 
    echo "E-Mail address: ".$matches[0]; 
} 
3

不要重新发明轮子。相反,使用解析器。 mailparse_rfc822_parse_addresses()是由具有深入知识的专业人士(以及您可能遇到的可能遇到的可能的怪癖)的专业人员为此特定任务而制作的。

实施例#1从文档:

$to = 'Wez Furlong <[email protected]>, [email protected]'; 
var_dump(mailparse_rfc822_parse_addresses($to)); 

给出(施加温和格式化):

array(2) { 
    [0] => array(3) { 
    ["display"] => string(11) "Wez Furlong" 
    ["address"] => string(15) "[email protected]" 
    ["is_group"] => bool(false) 
    } 
    [1] => array(3) { 
    ["display"] => string(15) "[email protected]" 
    ["address"] => string(15) "[email protected]" 
    ["is_group"] => bool(false) 
    } 
} 

也参见:imap_rfc822_parse_adrlist()Full name with valid email

+0

请注意,mailparse是不与PHP捆绑在一起的PECL扩展。否则,这是做到这一点的正确方法。 –

+0

@Tatu Ulmanen True。 'php-imap'扩展名可能存在,参见更新的答案。 – jensgram

相关问题