Alcuni caratteri speciali sono consentiti solo se preceduti da un carattere escape

Aug 18 2020

Voglio costruire un'espressione regolare (nello stile di lex, con una sintassi più simile a OCaml) per una classe di stringhe, dove 4 caratteri [, ], #, 'sono consentiti solo se preceduti da un carattere escape' .

Ecco alcuni esempi validi:

  • '#Data, abc'#Headers, abc'#Totals'[efg, 123'#Totals']efg, abc,123

Ecco alcuni esempi non validi:

  • #Data, abc#Headers, abc#Totals[efg, 123#Totals]efg,'#Totals[efg

Spero che la definizione sia chiara. Innanzitutto, qualcuno sa come costruire un'espressione così regolare? In secondo luogo, qualcuno sa come costruire un'espressione così regolare (nello stile di lex, con una sintassi più simile a OCaml) che possa essere accettata da ocamllex?

Risposte

JeffreyScofield Aug 18 2020 at 08:01

Non dici che le stringhe accettate sembrano diverse se non con alcuni esempi. Tanto per concretezza, diciamo che sono consentite lettere minuscole e cifre, ei 4 caratteri speciali sono consentiti solo se preceduti da '.

Questo, quindi, è descritto dalla chiusura Kleene di un insieme di 36 stringhe di un carattere e 4 stringhe di due caratteri.

Che assomiglia a questo:

 (['a' - 'z' '0' - '9'] | '\'' ['\'' '#' '[' ']'])*