Операторы регулярных выражений RFC
Недавно я прочитал документ RFC и заметил, что используемые операторы регулярных выражений не соответствуют общеизвестным. Например:
date-time = [ day-of-week "," ] date time [CFWS]
year = (FWS 4*DIGIT FWS) / obs-year
Квадратная скобка означает, что он будет соответствовать только одному из нескольких символов в нем. Но в RFC я вижу, что они интерпретируют это как "опционально". То же самое со звездочкой, которая говорит, что предыдущий токен будет встречаться ноль раз или более. В нашем примере
4*DIGIT
что нетрудно догадаться, что означает 4 вхождения токена DIGIT.
Как следует интерпретировать операторы регулярных выражений RFC, есть ли документ, описывающий их назначение?
1 ответ
Документ (на мой взгляд), на который вы смотрите, RFC 2822, гласит:
1.2.2. Синтаксическая запись
В этом стандарте используются форматы расширенной формы Бэкуса-Наура (ABNF), указанные в [RFC2234] для формальных определений синтаксиса сообщений.
Итак, да, синтаксис определен в RFC 2234 и не является регулярными выражениями.
Несколько разделов, специфичных для указанного вами блока:
3.5 Группа последовательностей
Элементы, заключенные в круглые скобки, рассматриваются как один элемент, содержимое которого СТРОГО ЗАКАЗАНО.
3.6 Повторение переменной
Оператор "*", предшествующий элементу, указывает на повторение. Полная форма:
<a>*<b>element
где и являются необязательными десятичными значениями, указывающими не менее и не более вхождений элемента.
3.8 Необязательная последовательность
Квадратные скобки заключают в себе дополнительную последовательность элементов: