在Java中,哪种正则表达式更适合匹配一个长度为17个字符的字符串,所有字母都大写,且不包含字母I(i),O(o)或Q(q)。
我尝试了以下正则表达式,但它仍然匹配I、O和Q,甚至比17个字符多或少。
我尝试了以下正则表达式,但它仍然匹配I、O和Q,甚至比17个字符多或少。
^[A-Z]+
我该如何改进这个问题?
[A-HJ-NPR-Z]
替换 [A-Z]
。这将匹配从 A
到 H
,从 J
到 N
,字母 P
和从 R
到 Z
。+
)。为了匹配 恰好 17 个字符,+
将需要变成 {17}
。^
,在结尾加上 $
。这将确保字符串不由其他任何内容组成。^[A-HJ-NPR-Z]{17}$
。正则表达式的示例可在此处查看: https://regex101.com/r/fS4eP7/1。17
并且是使用 Java 编写的。 - vks大写字符串可以使用量词和序列中的消除进行比较。如果我们在Matcher类中使用matches方法来限制字符数,它将检查以下确切序列。
String upperCaseString = new String("ABCDEABCDEABCDEAE");
System.out.println("value is " + Pattern.compile("([A-Z&&[^IOQ]]){17}").matcher(upperCaseString).matches());
^[A-HJ-NPR-Z]{17}$
。 - dotvav