我想捕获一个捕获组中的第一个和最后一个字符。
我当前的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
答案 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$
基本上,它会尝试从头开始匹配字母数字字符,然后匹配[a-zA-Z0-9_\.]
0次或多次。在到达@
之前,它会向后检查是否有一个点(如果不是字母数字,则必须是一个点)。
答案 2 :(得分:1)
尝试使用此正则表达式-(^ [\ w] [\ w \。\ w] + [\ w])@([\ w] +)\。com