[英]Regex email text with prefix and suffix
我有两种情况的html / text:
My email is username@domen.com
My email is <a href="mailto:username@domen.com">username@domen.com</a>
另外,我还有一个功能,可以搜索类似的电子邮件链接,并用<a href="email@address">email@address</a>
模式替换,并且它可以正常工作。 但是,如果文本已经包含电子邮件链接,该怎么办。 我也不想匹配它们。
function make_email_links($text)
{
return preg_replace(
array('/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+)
(\\.[A-Za-z0-9-]+)*)/iex'
),
array(
"stripslashes((strlen('\\2')>0?'<a href=\"mailto:\\0\">\\0</a>':'\\0'))"
),
$text
);
}
我尝试过
'/((^<a) .......... )/iex'
但是没有成功。 如何仅匹配文本之类的电子邮件链接而不匹配真实的电子邮件链接?
您应该尝试这样:
$formattedTest = preg_replace("#(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $text);
我用了旧的(这行不通!):
$formattedTest = preg_replace('/([\w\.!#\$%\-+.]+@[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)+)/', '<a href="mailto:\\1">\\1</a>', $text);
但是正如您所说,即使它已经在标签中,它也会复制我的电子邮件。
怎么样:
if (strstr($text, "<a href") !==false)
return $text
在执行preg_replace之前? (或什至更保存正则表达式)。 不要浪费时间尝试将所有事情都变成“一个”大模式。 请记住:SourceCode是经常读而不是书面的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.