Regex电子邮件文本与前缀和后缀


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
   );
}

I tried with

'/((^<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?(或者更多的保存正则表达式)。不要浪费你的时间试图把所有的事情都纳入"一个"大模式。请记住:源代码通常是阅读的,而不是编写的。