Создать регулярное выражение posix: любые года, кроме двух лет

Нужно создать регулярное выражение в posix, которое будет находить любые года в скобках, кроме 2021 и 2022 года. Пока получилось только такое: /\([0-9][0-9][^2][^1-2]\) Нужно чтобы находило 1,3,5 строки. А это выражение не находит 1.

(2020)
(2021)
(1999)
(2022)
(2030)

Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Выражение, совместимое со стандартом POSIX ERE:

\([0-9]{2}([01][0-9]|20|2[3-9]|[3-9][0-9])\)

См. пример работы регулярного выражения.

Подробности:

  • \( - (
  • [0-9]{2} - две цифры
  • ([01][0-9]|20|2[3-9]|[3-9][0-9]):
    • [01][0-9]| - от 00 до 19 или
    • 20| - 20 или
    • 2[3-9]| - от 23 до 29
    • [3-9][0-9] - от 30 до 99
  • \) - )

Для преобразования выражения в POSIX BRE (расширенный в утилитах GNU) измените экранирование:

([0-9]\{2\}\([01][0-9]\|20\|2[3-9]\|[3-9][0-9]\))
→ Ссылка