提取两个字符之间的字符串

时间:2011-09-12 10:07:12

标签: php regex

我有一个格式为Fname Lname<fname@urmail.com>的输出字符串。我想从这里提取电子邮件。我怎么能这样做?

4 个答案:

答案 0 :(得分:10)

如果你可以确定字符串格式是一致的,那么一个简单的正则表达式就可以解决这个问题:

$input = 'Fname Lname<fname@urmail.com>';
preg_match('~<(.*?)>~', $input, $output);
$email = $output[1];

答案 1 :(得分:3)

不要重新发明轮子。相反,使用解析器。 mailparse_rfc822_parse_addresses()是专业人士为这项特定任务而制作的,他们对该主题有深入的了解(以及您可能可能遇到的可能的怪癖)。

来自文档的示例#1:

$to = 'Wez Furlong <wez@example.com>, doe@example.com';
var_dump(mailparse_rfc822_parse_addresses($to));

给予(应用温和格式):

array(2) {
  [0] => array(3) {
    ["display"] => string(11) "Wez Furlong"
    ["address"] => string(15) "wez@example.com"
    ["is_group"] => bool(false)
  }
  [1] => array(3) {
    ["display"] => string(15) "doe@example.com"
    ["address"] => string(15) "doe@example.com"
    ["is_group"] => bool(false)
  }
}

另请参阅:imap_rfc822_parse_adrlist() Full name with valid email

答案 2 :(得分:1)

使用像substring和explode这样的函数(比正则表达式更简单的方法,并且可以做到这一点):

<?php
$text = 'Fname Lname<fname@urmail.com>';
$pieces = explode('<',$text);
$mail=substr($pieces[1],0,-1);
echo $mail;
?>

答案 3 :(得分:0)

这应该打印电子邮件地址:

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