正则表达式匹配17个大写字符

nmv*_*tor 3 java regex

在java中,哪个Regex更适合匹配长度为17个字符的字符串,所有字符串都是大写的,并且不包括字母I(i),O(o)或Q(q).

我尝试过以下但它仍然匹配I,O和Q,甚至大于或等于17

^[A-Z]+
Run Code Online (Sandbox Code Playgroud)

我该如何改进?

npi*_*nti 6

您的方法有3个问题:

  1. 您正在匹配任何大写英文字符.为了解决这个问题,你将需要更换[A-Z][A-HJ-NPR-Z].这应该从搭配AH,从JN,信PRZ.

  2. 第二个问题是你匹配一个或多个(由于+).为了匹配正好 17个字符,+需要成为{17}.

  3. 步骤1和2将简单匹配任何包含规定范围内的17个大写字母的字符串.要确保该字符串不包含任何其他内容,请^$表达式的开头和结尾添加.这将确保字符串不是由其他任何东西组成的.

因此,您的表达式应如下所示:^[A-HJ-NPR-Z]{17}$.此处提供了正则表达式的示例.


vks*_*vks 5

^(?!.*(?:[IOQ]))[A-Z]{17}$
Run Code Online (Sandbox Code Playgroud)

只需添加一个.lookahead参见演示.

https://regex101.com/r/uF4oY4/24