L'utilisation d'un préfixe ?i:
pour indiquer une expression régulière insensible à la casse ne fait pas partie de la norme POSIX pour les expressions régulières et n'est pas prise en charge par Text.Regex.Posix
. Au lieu de cela, vous devez spécifier un indicateur lorsque l'expression régulière est compilée. Cela signifie que vous ne pouvez pas utiliser l'opérateur =~
, car cet opérateur utilise toujours les indicateurs de compilation par défaut.
Au lieu de cela, vous voudrez probablement définir une fonction d'assistance:
{-# LANGUAGE FlexibleContexts #-}
import Data.Bits
import Text.Regex.Posix
-- | Compile a case-insensitive regular expression.
makeIRegex :: RegexMaker Regex CompOption ExecOption source => source -> Regex
makeIRegex = makeRegexOpts (defaultCompOpt .|. compIgnoreCase) defaultExecOpt
et vous pouvez écrire:
> match (makeIRegex "a") "a" :: Bool
True
> match (makeIRegex "a") "A" :: Bool
True
>
AFAIK, 'i: n'est pas a' expression régulière valide dans POSIX. avez-vous une source? – ymonad