2009-09-22 74 views
1

我遇到了正则表达式问题。不包含正则表达式中的匹配字符

我有一个字符串,我需要匹配。该字符串总是以2个字母开始,然后是6位数字,例如,

  • EF123456
  • AB123456

然而,有一个我需要忽略一个字母组合。例如: -

  • XX123456

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

目前,我在做的事:

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

if(pattern.matcher(n).matches() && !n.toUpperCase().startsWith("XX")) { 
    // do match stuff 
} 

我怎么可以重写我的正则表达式,这样我可以在我上面的代码摆脱startsWith条款?

回答

4

使用negative look-ahead

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

(?!XX)的意思是“不匹配,如果我能在当前位置匹配XX”,但它实际上并没有改变当前位置(所以测试的两个字符仍然可以通过[A-Z]{2}匹配。)

+0

感谢 - 工作。我会跟随你的链接,并阅读更多。 – 2009-09-22 09:00:06

相关问题