正则表达式仅验证捕获的组的结果

时间:2019-04-18 06:50:06

标签: regex

我有此正则表达式来检测电子邮件地址:

(?=.*[a-zA-Z])([a-zA-Z0-9_.+-]{8,})@(\S+\.\S+)

要求:@之前的部分必须包含至少一个字母,并且长度至少为8个字符。

我正在使用正向先行查找是否包含字母,但先行实际上适用于整行(@之后的部分通常将包含字母),因此可以通过

123456789@gmail.com

问题是,我如何仅验证第一个捕获组(在这种情况下为123456789)的结果以查看是否有字母?

1 个答案:

答案 0 :(得分:2)

stat之前的<dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>jaxrs-api</artifactId> <version>3.0.10.Final</version> </dependency> 消费模式部分与[a-zA-Z0-9_.+-]{8,}不匹配,因此前行检查应仅检查0个或多个字符后的字母,除了 @

使用

@

将解决此问题。参见the regex demoRegulex graph

enter image description here

您可以通过规定@进一步优化超前模式。例如。由于您只允许(?=[^@]*[a-zA-Z])([a-zA-Z0-9_.+-]{8,})@(\S+\.\S+) 除字母外,您可以将正则表达式写为

[^@]

请参见this regex demo

或者,您可以遵循principle of contrastsuggested in comments),并使用0-9_.+-代替(?=[0-9_.+-]*[a-zA-Z])([a-zA-Z0-9_.+-]{8,})@(\S+\.\S+) ^^^^^^^^^

根据您使用正则表达式的位置,可能要用[^@a-zA-Z]*[^@]*锚将其包装以确保完整的字符串匹配。