繁体   English   中英

正则表达式电子邮件文本,带有前缀和后缀

[英]Regex email text with prefix and suffix

我有两种情况的html / text:

  1. My email is username@domen.com
  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM