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

时间:2009-09-22 08:48:27

标签: 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.toUpperCase().startsWith("XX")) {
    // do match stuff
}

如何重写我的正则表达式,以便我可以摆脱上面代码中的startsWith子句?

1 个答案:

答案 0 :(得分:5)

使用negative look-ahead

"(?!XX)[A-Z]{2}[0-9]{6}"

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