Строка регулярного выражения Java соответствует двум буквам страны, кроме списка

Я хотел бы, чтобы regex в java соответствовало всем странам, кроме их списка. Например, все страны, кроме Испании, я пробовал:

[A-Z]{2}&&^(ES)

куда

  • PT должно быть true
  • DE должно быть true
  • ES должно быть false

Все страны, кроме списка стран

[A-Z]{2}&&^(ES|PT|DE)

Благодарность


person pauporret    schedule 10.01.2017    source источник


Ответы (1)


Это можно сделать с помощью негативного просмотра вперед с нулевой шириной, поэтому окончательное регулярное выражение будет ^(?!ES|PT|DE)[A-Z]{2}$, указывающим, что вам нужны 2 заглавные буквы, кроме ES, PT и DE. Или просто (?!ES|PT|DE)[A-Z]{2}, если вы используете метод matches(String regex) как указано @WiktorStribiżew.

person Nicolas Filotto    schedule 10.01.2017
comment
Это правильно ! просто мелочь :p вторая скобка вокруг ES|PT|DE не очень полезна, поэтому мы получили (?!DE|ES|PT)[A-Z]{2} :p - person baddger964; 10.01.2017
comment
Не нужны ^ и $ в начале/конце шаблона с String#matches(). - person Wiktor Stribiżew; 10.01.2017
comment
Или, может быть, привязка \b более уместна: p regex101.com/r/kc79K1/2 \b якорь соответствует концу или началу слова - person baddger964; 10.01.2017