【问题标题】:Linking email addresses that aren't already linked链接尚未链接的电子邮件地址
【发布时间】:2012-09-03 12:44:51
【问题描述】:

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

/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,64})/

但是,我不想将之前已经链接的任何内容链接为 mailto 链接或现有链接(例如 index.php?email=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>

更新

这是我用来查找电子邮件地址的 PHP 示例(抱歉,我认为这不是必需的):

$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>

更新 2

我还有一个正则表达式问题(如果可能的话) - 我还有下面的正则表达式可以让所有链接都指向一个新窗口,但是,我不希望任何 mailto 链接到一个新窗口 - 是可以不定位mailto 链接吗?

$output = preg_replace("/<(a)([^>]+)>/i", "<\\1 target=\"_blank\"\\2>", str_replace('target="_blank"', '', $output));

【问题讨论】:

  • 您需要在实际执行链接的位置提供代码 sn-p。简单的正则表达式模式是不够的。
  • 不认为它是必需的(因为正则表达式是正则表达式),现在包括
  • 不是每个正则表达式都是正则表达式。不同的语言允许不同的功能。例如,lookbehinds 在 .NET 中有效,但在 JavaScript 中无效。这就是为什么我们需要知道您使用什么语言来处理正则表达式。

标签: php regex replace


【解决方案1】:

这个正则表达式怎么样?

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

【讨论】:

  • 我试过了,但它不匹配任何东西,事实上,它似乎出于某种原因删除了所有东西$data = "example@example.com"; echo preg_replace("/((?&lt;!(?:mailto:|=)[a-zA-Z0-9._%+-]*)[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,64})/", "&lt;a href='mailto:$1'&gt;$1&lt;/a&gt;", $data); 至于英国地址,它确实匹配它们所以不确定在哪里来自 。 . .
  • 对不起。我已经用另一个版本的正则表达式更新了答案。请尝试一下。
  • +1,谢谢!无论如何,如果使用gskinner.com/RegExr进行检查,它会起作用,但是使用javascript我尝试使用以下命令会出错: new RegExp(/((?))/, "g");错误:SyntaxError:无效的正则表达式:(regexp):无效的组。可能是什么?
  • @ianaz OP 正在使用支持 lookbehind ((?&lt;!lookup_text)) 的 preg_replace。 JavaScript 不支持此功能。
  • 你能帮我把它转换成 js 替代品吗?
猜你喜欢
  • 2013-08-03
  • 2013-11-25
  • 2015-01-12
  • 2011-10-01
  • 1970-01-01
  • 2011-08-11
  • 2019-03-11
  • 2017-09-24
相关资源
最近更新 更多