Некоторые специальные символы разрешены, только если им предшествует escape-символ.
Я хочу построить регулярное выражение (в стиле Лекса, с более OCaml-подобный синтаксис) для класса строк, где 4 -х символов [
, ]
, #
, '
разрешено только если им предшествует экранирующего символа'
.
Вот несколько действенных примеров:
'#Data
,abc'#Headers
,abc'#Totals'[efg
,123'#Totals']efg
,abc
,123
Вот несколько недействительных примеров:
#Data
,abc#Headers
,abc#Totals[efg
,123#Totals]efg
,'#Totals[efg
Надеюсь, определение ясное. Во-первых, кто-нибудь знает, как построить такое регулярное выражение? Во-вторых, знает ли кто-нибудь, как построить такое регулярное выражение (в стиле lex, с синтаксисом, более похожим на OCaml), которое может принять ocamllex?
Ответы
Вы не говорите, что принятые строки выглядят иначе, чем на нескольких примерах. Для конкретности допустим, что строчные буквы и цифры разрешены, а 4 специальных символа разрешены, только если им предшествует '
.
Это, таким образом, описывается закрытием Клини набора из 36 односимвольных строк и 4 двухсимвольных строк.
Это выглядит так:
(['a' - 'z' '0' - '9'] | '\'' ['\'' '#' '[' ']'])*