我想捕获一个捕获组中的第一个和最后一个字符。
我当前的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@]+$