我目前正在使用 Laravel 构建一个 Slack 机器人,其中一个功能是它可以接收电子邮件地址并向其发送消息。
问题是电子邮件地址(例如 bob@example.com
)作为 <mailto:bob@example.com|bob@example.com>
出现来自 Slack。
我目前有一个从中检索电子邮件的功能:
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 提供的字符串中获取电子邮件地址的更好方法?
最佳答案
如果您知道它始终采用的格式,则始终可以将正则表达式从等式中剔除:
$testString = '<mailto:bob@example.com|bob@example.com>';
$testString = str_replace(['<mailto:', '>'], '', $testString);
$addresses = explode('|', $testString);
echo $addresses[0];
关于php - 从字符串中检索完整的电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40692241/