2012-09-03 32 views
3

我目前匹配的电子邮件地址与下面的正则表达式(和连接它们作为mailto链接)的电子邮件地址:链接,尚未联系

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

不过,我不希望链接任何有前面已经链接为mailto链接或现有的链接内,否则该链接被相当搞砸了像下面的(如[email protected]):

<a href="mailto:<a href="mailto:[email protected]">[email protected]</a>"><a href="mailto:[email protected]">[email protected]</a></a> 

更新

下面是我用找到的电子邮件地址(对不起,没想到却是必需的)PHP的一个例子:

$input = "[email protected]<br><br><a href='mailto:[email protected]'>test email</a><br><br><a href='mailto:[email protected]'>[email protected]</a>"; 

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

//output 
<a href="mailto:[email protected]">[email protected]</a><br><br><a mailto:[email protected]'="" href="mailto:&lt;a href=">[email protected]</a>'&gt;test email<br><br><a mailto:[email protected]'="" href="mailto:&lt;a href=">[email protected]</a>'&gt;<a href="mailto:[email protected]">[email protected]</a> 

更新2

我也有一个进一步正则表达式的问题(如果可能的话) - 我也有下面的正则表达式,使所有链接目标到一个新的窗口,但是,我不想任何东西mailto链接到一个新窗口 - 是否有可能不是目标mailto链接?

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

您需要提供代码片段,以便实际执行链接。简单的正则表达式模式是不够的。 –

+0

不认为这是必需的(因为正则表达式是正则表达式),现在包括 – MrJ

+0

任何人都可以协助吗? – MrJ

回答

3

这个正则表达式怎么样?

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

我已经给了这个尝试,但它不匹配任何东西,事实上,它似乎因为某些原因删除了一切'$ data =“[email protected]”; echo preg_replace(“/((?<!(?: mailto:| =)[a-zA-Z0-9 ._%+ - ] *)[a-zA-Z0-9 ._%+ - ] + @ [a-zA-Z0-9 .-] + \。[a-zA-Z] {2,64})/“,”$1“,$ data);' 至于英国地址,匹配他们,所以不知道从哪里来。 。 。 – MrJ

+0

对不起。我用另一个版本的正则表达式更新了答案。请尝试一下。 –

+0

+ 1,谢谢!无论如何,它的工作,如果使用http://gskinner.com/RegExr/检查使用JavaScript,但我尝试使用:new RegExp(/((?<!mailto:| = | [a-zA-Z0-9。 _%+ - ])[A-ZA-Z0-9 ._%+ - ] + @ [A-ZA-Z0-9. - 。] + \ [A-ZA-Z] {2,64} (?![a-zA-Z] | <\/[aA]>))/,“g”); 错误:SyntaxError:无效的正则表达式:(正则表达式):无效的组。 可能是什么? – ianaz