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

我当前的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@]+$

09-11 19:52
查看更多