2009-09-22 73 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

相關問題