2009-09-28 153 views
10

任何人都可以幫助我一個正則表達式,將返回@符號後的電子郵件地址的結束部分?我是新來的正則表達式,但想學習如何使用它,而不是寫低效率的.net字符串函數!正則表達式從域名的電子郵件地址

E.g.對於「[email protected]」的輸入,我需要輸出「example.com」。

乾杯! 添

回答

16

正則表達式是相當重的機器用於這一目的。只需將包含電子郵件地址的字符串拆分爲@角色,然後拿下第二個角色。 (電子郵件地址是保證僅包含一個@字符。)

+4

這在技術上並非如此,因爲只有當@符號位於帶引號的字符串中時,您可以有多個@符號http://en.wikipedia.org/wiki/Email_address#Syntax對於電子郵件地址的所有意圖和目的驗證,一個@符號是分離器。 – 2012-08-23 20:12:16

14

@(。*)$

這將匹配與@,然後捕捉一切,直到輸入的結尾($)

+3

謝謝!我得到了「@ example.com」。我可以在沒有@的情況下獲得價值嗎? – TimS 2009-09-28 16:20:06

+1

你可能沒有找到合適的小組。括號'(',')'表示組匹配,因此請確保從索引爲1的組中獲取結果,而不是0(因爲索引#0總是爲整個表達式匹配保留)。 – 2009-09-28 17:06:49

+0

這是正確的答案,因爲OP特意要求一個正則表達式......順便說一句,當我到達這裏時我正在尋找:) – 2014-11-11 17:29:45

2

你輸入一個簡單的正則表達式是:

^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$ 

但是,當您申請廣泛和異構的域時,它可能沒用。

一個例子是:

^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)$ 

但是,因爲你需要,你可以優化後綴域名。

要不是你的後綴需要,你只需要:

@ + $

資源: http://www.regular-expressions.info/email.html

+0

實際上[正則表達式有點長](http://cpansearch.perl。 org/src/RJBS/Email-Valid-0.182/lib/Email/Valid.pm) – xxxxxxx 2009-09-28 15:59:27

+0

我推薦這個解決方案,因爲它的限制較少。 – 2009-09-28 16:00:46

+0

只要不忘記將域名捕獲到一個組中,就會問:'[A-Z0-9 ._%+ - ] + @([A-Z0-9 .-] + \。[AZ] { 2,4})$' – 2009-09-28 16:03:06

3

這是一個通用的電子郵件匹配:

[a-zA-Z][\w\.-]*[a-zA-Z0-9]@([a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]) 

。注意,僅捕獲域組;如果您使用以下,您可以捕獲部分出發的@也:

([a-zA-Z][\w\.-]*[a-zA-Z0-9])@([a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]) 

我不知道這是否符合RFC 2822,但我對此表示懷疑。功能

1
[email protected]; 
// now you want to fetch gmail from input user PHP's inbuilt function 
preg_match('/@(.*)/', $input, $output); 
echo $output[1]; // it'll print "gmail.com" 
  • 文檔:的preg_match()
+2

該鏈接與此處發佈的問題完全無關。 **不要簡單地鏈接到你的網站這樣**,否則你會發現你的帖子被刪除爲垃圾郵件。我正在刪除您的鏈接。 – 2012-12-26 11:11:46

+0

我知道這與問題無關,但鏈接中包含非常棘手的示例,所以認爲這對其他人很有用......好的,下次我會照顧它。謝謝:-) – 2012-12-26 12:26:46

1

試試這個正則表達式:

(?<=([\w-\.]@))((?:[\w]+\.)+)([a-zA-Z]{2,4}) 
+0

(?<=([\ w - \。] @))((?:[\ w] + \。)+)([a-zA-Z] {2,4}) – 2013-03-20 16:41:33

2

哇,這裏所有的答案都不太對勁。

的電子郵件地址可以有很多「@」只要你想,最後一個不一定域:(

例如之前的一個,這是一個有效的電子郵件地址:

[email protected](i'm a comment (with an @)) 

雖然你必須很有意思才能使你的電子郵件地址。

所以首先解析出最後的所有評論。

然後

int atIndex = emailAddress.LastIndexOf("@"); 
String domainPart = emailAddress.Substring(atIndex + 1); 
0
(@)(\w+\-|\w+)+(\.) 

我不是專家,但上面的表達式是你需要從電子郵件搶域,至少據我可以告訴。

問題就像您指出的那樣,您不僅抓取域而且抓取「@」和「。」。要在正則表達式訪問的域名使用「$ 2」,並保留「@」和,你可以使用這樣的表達「」:

$1newdomain$3 

http://www.regexr.com/

上面的網站是個好地方試用正則表達式來看看它是如何工作的。

相關問題