Java 正则表达式匹配17个大写字符
在java中,哪个正则表达式更适合匹配一个长度为17个字符、全大写且不包含字母I(I)、O(O)或Q(Q)的字符串 我尝试了以下方法,但它仍然匹配I、O和Q(包括I、O和Q),甚至大于或小于17Java 正则表达式匹配17个大写字符,java,regex,Java,Regex,在java中,哪个正则表达式更适合匹配一个长度为17个字符、全大写且不包含字母I(I)、O(O)或Q(Q)的字符串 我尝试了以下方法,但它仍然匹配I、O和Q(包括I、O和Q),甚至大于或小于17 ^[A-Z]+ 我如何改进这一点 ^(?!.*(?:[IOQ]))[A-Z]{17}$ 只需添加一个lookahead。请参阅演示 您的方法有三个问题: 您正在匹配任何大写英文字符。要解决此问题,您需要将[A-Z]替换为[A-HJ-NPR-Z]。这应该从A到H,从J到N,字母P,从R到Z 第二个问题
^[A-Z]+
我如何改进这一点
^(?!.*(?:[IOQ]))[A-Z]{17}$
只需添加一个lookahead
。请参阅演示
您的方法有三个问题:
[A-Z]
替换为[A-HJ-NPR-Z]
。这应该从A
到H
,从J
到N
,字母P
,从R
到Z
+
)。要精确匹配17个字符,+
需要变成{17}
^
,在表达式的结尾添加$
。这将确保字符串不是由任何其他材料制成的因此,您的表达式应该如下所示:
^[a-HJ-NPR-Z]{17}$
。正则表达式的示例可用。可以使用序列中带消去的量词来比较大写字符串。如果我们在Matcher类中使用matches方法,为了限制字符数,它将检查下面的确切序列
String upperCaseString = new String("ABCDEABCDEABCDEAE");
System.out.println("value is " + Pattern.compile("([A-Z&&[^IOQ]]){17}").matcher(upperCaseString).matches());
谢谢,但这是否正好匹配17个字符?在java中?@nmvictor是的,它将匹配
17
,在java中,您应该声明最后的正则表达式是^[A-HJ-NPR-Z]{17}$