php - 从字符串中检索完整的电子邮件地址

标签 php regex laravel laravel-5.3 slack-api

我目前正在使用 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/

相关文章:

php - 从 mySQL 检索另一个数据以进行项目推荐

objective-c - 最佳实践 : Partial Regex Matching

.net - 获取解析文本的正则表达式.net

php - 是否有正确的方法在 Laravel 中对一种形式的不同部分实现部分验证

php - 确认和取消按钮 Laravel Sweet Alert

php - 在 composer 安装期间运行 Gulp 任务

php - 在某种类型的所有作业完成后安排作业

php - mysql列数据显示,获取某列的所有字段并显示为链接

javascript - 仅当字符串不以某些字符开头时才获取字符串吗?

php - 如果 MYSQL 数据发生变化,有没有办法触发 PHP 文件系统缓存立即失效?