У меня есть эти строки, которые я хочу сопоставить с помощью регулярного выражения:

  • es-us
  • fr (0 тире)
  • fr-ca (1 тире)
  • xx-xx-xx (2 тире)

У меня есть начальная точка регулярного выражения как: ([a-z])+-([a-z])+-([a-z])+, которая соответствует приведенному выше примеру xx-xx-xx, но строки с одним тире или меньше исключаются. Итак, как я могу сделать так, чтобы он ТАКЖЕ соответствовал fr-ca, fr или en-us в приведенных выше примерах? ПРИМЕЧАНИЕ: должны быть разрешены ВСЕ символы, а не только fr-ca или fr.

0
Rees 24 Сен 2018 в 23:41

2 ответа

Лучший ответ

Вероятно, это дубликат, но я не уверен, что искать. В любом случае, вот простой ответ: ^[a-zA-Z]{2}(?:-[a-zA-Z]{2}){0,2}$

демонстрация

2
emsimpson92 24 Сен 2018 в 21:06

Чтобы также иметь соответствующий регистр для любого сегмента, используйте:

^([a-z]{2}|[A-Z]{2})(?:-([a-z]{2}|[A-Z]{2})){0,2}$
1
Kevin Welker 24 Сен 2018 в 21:11