【发布时间】:2010-12-02 01:08:52
【问题描述】:
谁能帮我一个正则表达式,它会在@符号之后返回电子邮件地址的结尾部分?我是 regex 的新手,但想学习如何使用它而不是编写低效的 .Net 字符串函数!
例如对于“test@example.com”的输入,我需要“example.com”的输出。
干杯! 蒂姆
【问题讨论】:
标签: .net regex email-address
谁能帮我一个正则表达式,它会在@符号之后返回电子邮件地址的结尾部分?我是 regex 的新手,但想学习如何使用它而不是编写低效的 .Net 字符串函数!
例如对于“test@example.com”的输入,我需要“example.com”的输出。
干杯! 蒂姆
【问题讨论】:
标签: .net regex email-address
另一个较短的例子是 @([\w.-]+)\.
【讨论】:
(@)(\w+\-|\w+)+(\.)
我不是专家,但以上表达式是您从电子邮件中获取域所需要的,至少据我所知。
问题正如指出的那样,您不仅要抓住域,还要抓住“@”和“.”。要访问正则表达式中的域名,请使用“$2”并保留“@”和“.”,您可以使用如下表达式:
$1newdomain$3
上面的网站是尝试正则表达式的好地方,看看它是如何工作的。
【讨论】:
哇,这里的所有答案都不完全正确。
一个电子邮件地址可以有任意多个“@”,而最后一个不一定是域之前的那个:(
例如,这是一个有效的电子邮件地址:
user@example.com(i'm a comment (with an @))
不过,您必须非常刻薄才能将其设为您的电子邮件地址。
首先,解析出最后的所有 cmets。
然后
int atIndex = emailAddress.LastIndexOf("@");
String domainPart = emailAddress.Substring(atIndex + 1);
【讨论】:
试试这个正则表达式:
(?<=([\w-\.]@))((?:[\w]+\.)+)([a-zA-Z]{2,4})
【讨论】:
$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"
【讨论】:
这是一个通用的电子邮件匹配器:
[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,但我对此表示怀疑。
【讨论】:
正则表达式是用于此目的的非常繁重的机器。只需在 @ 字符处拆分包含电子邮件地址的字符串,然后取后半部分。 (保证一个电子邮件地址只包含一个@ 字符。)
【讨论】:
您输入的简单正则表达式是:
^[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)$
但是,您可以根据需要优化该后缀域。
但是对于您的后缀需求,您只需要:
@.+$
【讨论】:
^[A-Z0-9._%+-]+@([A-Z0-9.-]+\.[A-Z]{2,4})$
@(.*)$
这将与@匹配,然后捕获所有内容,直到输入结束 ($)
【讨论】:
(、) 表示组匹配,因此请确保从索引为 1 而不是 0 的组中获取结果(因为索引 #0 始终为整个表达式匹配保留)。