从字符串中提取电子邮件地址 - php

php
2022-08-30 14:26:30

我想从字符串中提取电子邮件地址,例如:

<?php // code
$string = 'Ruchika <ruchika@example.com>';
?>

从上面的字符串中,我只想获取电子邮件地址。ruchika@example.com

请推荐如何实现这一目标。


答案 1

试试这个

<?php 
    $string = 'Ruchika < ruchika@example.com >';
    $pattern = '/[a-z0-9_\-\+\.]+@[a-z0-9\-]+\.([a-z]{2,4})(?:\.[a-z]{2})?/i';
    preg_match_all($pattern, $string, $matches);
    var_dump($matches[0]);
?>

在此处查看演示

第二种方法

<?php 
    $text = 'Ruchika < ruchika@example.com >';
    preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $text, $matches);
    print_r($matches[0]);
?>

在此处观看演示


答案 2

解析电子邮件地址是一项疯狂的工作,会导致非常复杂的正则表达式。例如,考虑使用此官方正则表达式来捕获电子邮件地址:http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

太神奇了吧?

相反,有一个标准的php函数可以做到这一点,并在这里调用和记录。mailparse_rfc822_parse_addresses()

它采用字符串作为参数,并返回一个关联数组,其中包含键显示、地址和is_group。

所以

$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)
  }
}

推荐