Skip to main content
 首页 » 编程设计

c#之正则表达式之匹配捕获组中的第一个和最后一个字符

2024年02月04日31tintown

我想捕获捕获组中的第一个和最后一个字符。

我当前的 RegEx 是 -

([\w\.]+)@([\w]+)\.com 

例如,如果有一个电子邮件地址 -

xyz@test.com 

这是输出-

Full match  0-12    `xyz@test.com` 
Group 1.    0-3 `xyz` 
Group 2.    4-8 `test` 

电子邮件地址可以包含字母数字和句点值。

如果我想缩减第 1 组,使其仅以字母数字值开始和结束,该怎么做?

我要修改这个捕获组 -

 ([\w\.]+) 

所需的输出是 -

xyz.@test.com Invalid 
.xyz@test.com Invalid 
xy.z@test.com Valid 

请您参考如下方法:

要告诉引擎在开始位置和 @ 之前匹配英文字母数字字符,您需要这样做:

^([a-zA-Z0-9][\.a-zA-Z0-9]*[a-zA-Z0-9])@([a-zA-Z0-9]+)\.com$ 

注意:\w 包含您可能不想要的 _。

但这不允许一个字符长的用户名。所以你必须稍微修改一下:

^([a-zA-Z0-9]+(?:\.+[a-zA-Z0-9]+)*)@([a-zA-Z0-9]+)\.com$ 

此外,这不应该被认为是一个好的电子邮件验证器。但是,由于您似乎缩小了与 .com TLD 的匹配范围,所以我认为这是一个非常具体的要求,否则它将域名限制为字母数字,并且不允许更多的字符在电子邮件中有效地址根据RFC 822 .这足以从用户输入中捕获电子邮件地址:

^[^\s@]+@[^\s@]+$