Php 从href链接获取电子邮件地址

Php 从href链接获取电子邮件地址,php,string,Php,String,如何仅从任何给定的href提取电子邮件地址 $str = 'mailto:john.doe@outlook.co.uk?subject=hiya'; 目前我是这样做的: $str = str_replace('mailto:', '', $str); $str = explode('?', $str); $str = $str[0]; 但是这是最好的方法吗?它会被发现吗?就我个人而言,我会让它成为一个可重用的函数,并做一些类似于下面的事情 function extract_emails($s

如何仅从任何给定的
href
提取电子邮件地址

$str = 'mailto:john.doe@outlook.co.uk?subject=hiya';
目前我是这样做的:

$str = str_replace('mailto:', '', $str);
$str = explode('?', $str);
$str = $str[0];

但是这是最好的方法吗?它会被发现吗?

就我个人而言,我会让它成为一个可重用的函数,并做一些类似于下面的事情

function extract_emails($str){
    // This regular expression extracts all emails from a string:
    $regexp = '/([a-z0-9_\.\-])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,4})+/i';
    preg_match_all($regexp, $str, $m);

    return isset($m[0]) ? $m[0] : array();
}
例子

“邮递员:约翰。doe@outlook.co.uk?主题=你好

返回[约翰]。doe@outlook.co.uk“]

“邮递员:约翰。doe@outlook.co.uk?主题=你好 我叫josh这是个测试test@hotmail.co.uk"

返回[约翰]。doe@outlook.co.uk', 'test@hotmail.co.uk“]


这将从提供的文本中的任何位置提取电子邮件,并可以处理多个电子邮件提取。因此,现在你可以通过在一个完整的句子,它会返回给你一系列的电子邮件。这样,如果范围不断增加,理论上可以完全重用

或者,您可以使用
解析url

<?php

$str = 'mailto:john.doe@outlook.co.uk?subject=hiya';
print_r(parse_url($str));

?>

Array
(
    [scheme] => mailto
    [path] => john.doe@outlook.co.uk
    [query] => subject=hiya
)

大堆
(
[方案]=>mailto
[路径]=>约翰。doe@outlook.co.uk
[查询]=>subject=hiya
)

在我看来没问题,你说的“被抓住”是什么意思?这感觉像是一种更干净的方法