2009-09-28 187 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/

上面的网站是个好地方试用正则表达式来看看它是如何工作的。

相关问题