Php 链接非';我还没联系上

Php 链接非';我还没联系上,php,regex,replace,Php,Regex,Replace,我目前正在将电子邮件地址与下面的正则表达式匹配(并将它们链接为mailto链接): 但是,我不想将以前已经链接过的任何内容链接为mailto链接或现有链接(例如index.php?电子邮件)=example@example.com)否则,链接会变得非常混乱,如下所示: <a href="mailto:<a href="mailto:example@example.com">example@example.com</a>"><a href="mailto:

我目前正在将电子邮件地址与下面的正则表达式匹配(并将它们链接为
mailto
链接):

但是,我不想将以前已经链接过的任何内容链接为
mailto
链接或现有链接(例如index.php?电子邮件)=example@example.com)否则,链接会变得非常混乱,如下所示:

<a href="mailto:<a href="mailto:example@example.com">example@example.com</a>"><a href="mailto:example@example.com">example@example.com</a></a>
这个正则表达式怎么样

/((?<!mailto:|=|[a-zA-Z0-9._%+-])[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.‌​-]+\.[a-zA-Z]{2,64}(?![a-zA-Z]|<\/[aA]>))/
/(?)/

您需要提供实际执行链接的代码段。简单的正则表达式模式是不够的。我不认为它是必需的(因为正则表达式就是正则表达式),现在包含的不是每个正则表达式都是正则表达式。不同的语言允许不同的功能。例如,lookbehinds可以在.NET中工作,但不能在JavaScript中工作。这就是为什么我们需要知道您使用什么语言来处理正则表达式。我已经尝试过了,但它与任何内容都不匹配,事实上,它似乎出于某种原因删除了所有内容
$data=”example@example.com";  echo preg_replace(“/((?很抱歉。我已经用另一个版本的正则表达式更新了答案。请试用它。+1,谢谢!不管怎样,如果使用javascript进行检查,它是有效的,但我通过尝试得到一个错误:new RegExp(/(?)/,“g”);错误:SyntaxError:无效的正则表达式:(RegExp):无效组。可能是什么?@ianaz OP正在使用支持查找(
(?)的
preg\u replace
)。JavaScript不支持此功能。请您帮助我将其转换为js替代方案?
$input = "example@example.com<br><br><a href='mailto:example@example.com'>test email</a><br><br><a href='mailto:example@example.com'>example@example.com</a>";

$output = preg_replace("/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,64})/i", "<a href='mailto:$1'>$1</a>", $input);

//output
<a href="mailto:example@example.com">example@example.com</a><br><br><a mailto:example@example.com'="" href="mailto:&lt;a href=">example@example.com</a>'&gt;test email<br><br><a mailto:example@example.com'="" href="mailto:&lt;a href=">example@example.com</a>'&gt;<a href="mailto:example@example.com">example@example.com</a>
$output = preg_replace("/<(a)([^>]+)>/i", "<\\1 target=\"_blank\"\\2>", str_replace('target="_blank"', '', $output));
/((?<!mailto:|=|[a-zA-Z0-9._%+-])[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.‌​-]+\.[a-zA-Z]{2,64}(?![a-zA-Z]|<\/[aA]>))/