Java 排除正则表达式中的匹配字符

Java 排除正则表达式中的匹配字符,java,regex,Java,Regex,我遇到了正则表达式的问题 我有一根绳子要配。字符串总是以2个字母开头,然后后跟6位数字,例如 EF123456 AB123456 然而,有一个字母组合我需要忽略。e、 g: XX123456 所以我想写一个正则表达式,只匹配字符串的正常格式 目前,我必须做: Pattern pattern = Pattern.compile("[A-Z]{2}[0-9]{6}"); ... if(pattern.matcher(n).matches() && !n.toUpperCas

我遇到了正则表达式的问题

我有一根绳子要配。字符串总是以2个字母开头,然后后跟6位数字,例如

  • EF123456
  • AB123456
然而,有一个字母组合我需要忽略。e、 g:

  • XX123456
所以我想写一个正则表达式,只匹配字符串的正常格式

目前,我必须做:

Pattern pattern = Pattern.compile("[A-Z]{2}[0-9]{6}");
...

if(pattern.matcher(n).matches() && !n.toUpperCase().startsWith("XX")) {
    // do match stuff
}
如何重写我的regexp,以便在上面的代码中去掉startsWith子句?

使用:

(?!XX)
表示“如果我可以在当前位置匹配
XX
,则不匹配”,但它实际上不会更改当前位置(因此它测试的两个字符仍然可以由
[A-Z]{2}
匹配)

使用:


(?!XX)
的意思是“如果我可以在当前位置匹配
XX
,则不匹配”,但它实际上不会更改当前位置(因此它测试的两个字符仍然可以由
[A-Z]{2}
匹配)

谢谢-这很有效。我会关注你的链接并阅读更多。谢谢-这很有效。我会关注你的链接并阅读更多内容。
"(?!XX)[A-Z]{2}[0-9]{6}"