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

时间:2018-09-21 06:24:41

标签: c# regex

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

我当前的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

3 个答案:

答案 0 :(得分:2)

要告诉引擎在起始位置和@前一个匹配的英文字母数字字符,您需要执行以下操作:

^([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的匹配范围,所以我认为这是一个非常具体的要求,否则它将域名限制为字母数字,并且不允许根据{在电子邮件地址中使用更多有效的字符{3}}。这足以从用户输入中捕获电子邮件地址:

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

答案 1 :(得分:1)

这有效:

^([0-9a-zA-Z][a-zA-Z0-9_\.]*)(?<!\.)@([a-zA-Z0-9_]+)\.com$

Demo

基本上,它会尝试从头开始匹配字母数字字符,然后匹配[a-zA-Z0-9_\.] 0次或多次。在到达@之前,它会向后检查是否有一个点(如果不是字母数字,则必须是一个点)。

答案 2 :(得分:1)

尝试使用此正则表达式-(^ [\ w] [\ w \。\ w] + [\ w])@([\ w] +)\。com