我有以下函数,基于 SO 中的答案,它将字符串中的电子邮件地址转换为 mailto 链接。但是,我正在尝试更进一步,将用户名和域名分成单独的变量。相反,下面的函数将最后一个句点之前的所有内容分隔到一个变量中,将句点之后的所有内容分隔到另一个变量中。
function emailize($str)
{
$mail_pattern = "/([A-z0-9._-]+@[A-z0-9_-]+.)([A-z0-9_-.]{1,}[A-z])/";
$str = preg_replace($mail_pattern, '<a class='obfuscate' data-user="$1" data-domain="$2" href="#">Click Here</a>', $str);
return $str;
}
使用 test@example.com 作为电子邮件地址,我希望test
1 美元,example.com
2 美元。
此外,我将传递一个可能有多个电子邮件地址的大字符串。
谢谢
通过更改捕获组,您可以实现所需的目标。捕获组中的:?
使其无法捕获。所以
([A-z0-9._-]+)@([A-z0-9_-]+.(?:[A-z0-9_-.]{1,}[A-z]))
应将用户名作为 1 个捕获组,将域作为另一个捕获组。
演示:https://regex101.com/r/BF7p2g/1/