2012-09-03 64 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