我想要捕获捕获组中的第一个和最后一个字符。
我现在的RegEx是-
([\w\.]+)@([\w]+)\.com例如,如果有一个电子邮件地址-
xyz@test.com这是输出-
Full match 0-12 `xyz@test.com`
Group 1. 0-3 `xyz`
Group 2. 4-8 `test`电子邮件地址可以包含字母数字和句点值。
如果我想减少Group 1,使其只以字母数字值开始和结束,该如何做?
我想修改这个捕获组-
([\w\.]+)所需的输出为-
xyz.@test.com Invalid
.xyz@test.com Invalid
xy.z@test.com Valid发布于 2018-09-21 14:38:37
要告知engine匹配起始位置的英文字母数字字符和@之前的一个字符,您需要执行以下操作:
^([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$此外,这不应该被认为是一个好的电子邮件验证器。但是,根据RFC 822的说法,你似乎缩小了与.com TLD的匹配范围,所以我认为这是一个非常具体的要求,否则它会将域名限制为字母数字,并且不允许更多在电子邮件地址中有效的字符。这足以从用户输入中捕获电子邮件地址:
^[^\s@]+@[^\s@]+$发布于 2018-09-21 14:45:26
这是可行的:
^([0-9a-zA-Z][a-zA-Z0-9_\.]*)(?<!\.)@([a-zA-Z0-9_]+)\.com$基本上,它尝试在开始时匹配字母数字字符,然后[a-zA-Z0-9_\.] 0或更多次。在它到达@之前,它会查看后面是否有一个点(如果不是字母数字,就一定是一个点)。
发布于 2018-09-21 14:51:49
试试这个正则表达式- (^\w+\w)@(\w+).com
https://stackoverflow.com/questions/52437788
复制相似问题