11

谁能帮我一个正则表达式,它会在@符号之后返回电子邮件地址的结尾部分?我是正则表达式的新手,但想学习如何使用它而不是编写低效的 .Net 字符串函数!

例如,对于“test@example.com”的输入,我需要“example.com”的输出。

干杯! 蒂姆

4

9 回答 9

15

为此目的,正则表达式是相当繁重的机器。只需在字符处拆分包含电子邮件地址的@字符串,然后取后半部分。(保证电子邮件地址只包含一个@字符。)

于 2009-09-28T15:52:10.543 回答
14

@(.*)$

这将与 @ 匹配,然后捕获所有内容,直到输入结束 ($)

于 2009-09-28T15:50:28.410 回答
4

这是一个通用的电子邮件匹配器:

[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,但我对此表示怀疑。

于 2009-09-28T15:53:09.013 回答
3

哇,这里的所有答案都不完全正确。

一个电子邮件地址可以有任意数量的“@”,而最后一个不一定是域之前的那个:(

例如,这是一个有效的电子邮件地址:

user@example.com(i'm a comment (with an @))

不过,您必须非常刻薄才能将其设为您的电子邮件地址。

所以首先,解析出最后的任何评论。

然后

int atIndex = emailAddress.LastIndexOf("@");
String domainPart = emailAddress.Substring(atIndex + 1);
于 2013-09-18T05:30:47.513 回答
2

您输入的简单正则表达式是:

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

但是,当您申请广泛且异构的域时,它可能无用。

一个例子是:

^[A-Z0-9._%+-]+@[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

于 2009-09-28T15:52:05.350 回答
1
$input=hardiksondagar@gmail.com;
// 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()
于 2012-12-26T06:28:00.920 回答
1

试试这个正则表达式:

(?<=([\w-\.]@))((?:[\w]+\.)+)([a-zA-Z]{2,4})
于 2013-03-20T16:40:53.117 回答
0
(@)(\w+\-|\w+)+(\.)

我不是专家,但以上表达式是您从电子邮件中获取域所需的,至少据我所知。

问题正如所指出的那样,您不仅要抓住域,还要抓住“@”和“.”。要在正则表达式中访问域名,请使用“$2”并保留“@”和“.”,您可以使用如下表达式:

$1newdomain$3

http://www.regexr.com/

上面的站点是尝试正则表达式以查看其工作原理和工作原理的好地方。

于 2015-07-26T00:09:52.237 回答
0

另一个较短的例子是 @([\w.-]+)\.

https://regex101.com/r/gmOH52/2

于 2020-03-19T02:31:54.890 回答