Alguns caracteres especiais são permitidos apenas se forem precedidos por um caractere de escape
Quero construir uma expressão regular (no estilo lex, com uma sintaxe mais parecida com OCaml) para uma classe de strings, onde 4 caracteres [
, ]
, #
, '
são permitidos apenas se forem precedidos por um caractere de escape'
.
Aqui estão alguns exemplos válidos:
'#Data
,abc'#Headers
,abc'#Totals'[efg
,123'#Totals']efg
,abc
,123
Aqui estão alguns exemplos não válidos:
#Data
,abc#Headers
,abc#Totals[efg
,123#Totals]efg
,'#Totals[efg
Espero que a definição seja clara. Primeiro, alguém sabe como construir essa expressão regular? Em segundo lugar, alguém sabe como construir uma expressão regular (no estilo lex, com uma sintaxe mais parecida com OCaml) que possa ser aceita pelo ocamllex?
Respostas
Você não diz que as strings aceitas se parecem a não ser com alguns exemplos. Apenas para concretude, digamos que letras minúsculas e dígitos são permitidos, e os 4 caracteres especiais são permitidos apenas se precedidos por '
.
Isso, então, é descrito pelo fechamento Kleene de um conjunto de 36 strings de um caractere e 4 strings de dois caracteres.
Que se parece com isso:
(['a' - 'z' '0' - '9'] | '\'' ['\'' '#' '[' ']'])*