我需要能够拆分包含电子邮件From
信息的字符串。我需要从字符串中提取$NAME
和$EMAIL
或任何可用的内容。
字符串可以采用以下格式:
"Santa Clause" <santa@example.com>
Santa Clause <santa@example.com>
<santa@example.com>
答案 0 :(得分:2)
preg_match('#(?:"(?<name>[^"]+)"|(?<name>.+))?<(?<email>.+)>#U', $string, $matches);
echo var_dump($matches);
preg_match('#(?:"(?<name>[^"]+)"|(?<name>.+))?<(?<email>[^>]+)>#U', $string, $matches);
echo var_dump($matches);
尝试上述之一。前者将允许更有效的电子邮件,而后者更快。
答案 1 :(得分:1)
$string_to_check = '"Santa Clause" <santa@npole.com>'
$matches = array();
preg_match('/?([^<"]*)"?\s*<(\S*)>/',$string_to_check,$matches);
$matches[1] //=> Santa Claus
$matches[2] //=> santa@npole.com
答案 2 :(得分:0)
如果分隔符始终是相同的字符(例如分号):
$items = explode($separator, $from);
否则,浏览preg_XXX
函数以进行基于正则表达式的字符串拆分。
答案 3 :(得分:0)
对于邮件地址,请查看http://php.net/manual/en/function.preg-match.php。这是一个将字符串与正则表达式匹配的函数。 Here是关于如何在PHP中使用正则表达式的简短介绍。
如果你也想要匹配这个名字,那将是一些努力,所以我建议你先开发一个正则表达式,它可以从你的字符串中提取一个电子邮件地址,然后对它进行扩充以找到这个名字。
答案 4 :(得分:0)
找到了这个并且效果很好!
$parts = preg_split('/[\'"<>]( *[\'"<>])*/', $text, -1, PREG_SPLIT_NO_EMPTY);