Certains caractères spéciaux ne sont autorisés que s'ils sont précédés d'un caractère d'échappement

Aug 18 2020

Je souhaite construire une expression régulière (dans le style de lex, avec une syntaxe plus proche d'OCaml) pour une classe de chaînes, où 4 caractères [, ], #, 'ne sont autorisés que s'ils sont précédés d'un caractère d'échappement' .

Voici quelques exemples valables :

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

Voici quelques exemples non valides :

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

J'espère que la définition est claire. Tout d'abord, est-ce que quelqu'un sait comment construire une telle expression régulière ? Deuxièmement, est-ce que quelqu'un sait comment construire une telle expression régulière (dans le style de lex, avec une syntaxe plus proche d'OCaml) qui puisse être acceptée par ocamllex ?

Réponses

JeffreyScofield Aug 18 2020 at 08:01

Vous ne dites pas que les chaînes acceptées ressemblent autrement qu'avec quelques exemples. Juste pour être concret, disons que les lettres minuscules et les chiffres sont autorisés, et les 4 caractères spéciaux ne sont autorisés que s'ils sont précédés de '.

Ceci est alors décrit par la fermeture de Kleene d'un ensemble de 36 chaînes à un caractère et 4 chaînes à deux caractères.

Qui ressemble à ça :

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