2009-09-22 6 views
1

Je suis bloqué par un problème d'expression régulière.à l'exclusion des caractères correspondants dans l'expression régulière

J'ai une chaîne à laquelle je dois faire correspondre. La chaîne commence toujours par 2 lettres, puis est suivie d'un nombre à 6 chiffres, par ex.

  • EF123456
  • AB123456

Cependant, il y a une combinaison de lettres que je dois ignorer. .: par exemple

  • XX123456

Je veux écrire une expression régulière pour correspondre uniquement le format normal des cordes.

En ce moment, je vais avoir à faire:

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

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

Comment puis-je réécrire mon expression rationnelle pour que je puisse me débarrasser de la clause startsWith dans mon code ci-dessus?

Répondre

4

Utilisez un negative look-ahead:

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

(?!XX) signifie « ne correspondent pas si je peux correspondre XX à la position actuelle », mais il ne change pas réellement la position actuelle (donc les deux personnages qu'il testés peut encore être égalé par [A-Z]{2}.)

+0

Merci - cela a fonctionné. Je vais suivre votre lien et lire plus. –

Questions connexes