我目前正在使用Laravel构建Slack机器人,其中一个功能是它可以接收电子邮件地址并向其发送消息。
问题在于,来自Slack的电子邮件地址(例如bob@example.com
)以<mailto:bob@example.com|bob@example.com>
的形式出现。
我目前有一个从中获取电子邮件的函数:
public function getEmail($string)
{
$pattern = '/[a-z0-9_\-\+]+@[a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i';
preg_match_all($pattern, $string, $matches);
$matches = array_filter($matches);
return $matches[0][0];
}
这似乎对于像bob@example.com
这样的电子邮件地址有效,但是在处理像bob.jones@example.com
这样的电子邮件地址时似乎会出现错误(会被转换为<mailto:bob.jones@example.com|bob.jones@example.com>
)。在这些情况下,该函数返回jones@example.com
作为电子邮件地址。
我不太擅长正则表达式,但是是否有其他我可以使用/更改的模式,或者从Slack提供的字符串中提取电子邮件地址的更好方法?
preg_match('/mailto:\K[^|>]+/', $str, $out)
。 - bobble bubble