исключая совпадающие символы в регулярном выражении - PullRequest
1 голос
/ 22 сентября 2009

Я застрял с проблемой регулярного выражения.

У меня есть строка, которой я должен соответствовать. Строка всегда начинается с 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
}

Как я могу переписать свое регулярное выражение, чтобы я мог избавиться от предложения StartWith в моем коде выше?

1 Ответ

5 голосов
/ 22 сентября 2009

Используйте негативный прогноз :

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

(?!XX) означает «не совпадать, если я могу сопоставить XX в текущей позиции», но на самом деле это не меняет текущую позицию (поэтому два проверенных символа могут быть сопоставлены с [A-Z]{2} .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...