EN
importPour l'utiliser : import Data.Regex

Data.Regex — moteur à dérivées de Brzozowski

Synopsis
matches : Regex -> String -> Bool

matches r s : la regex matche-t-elle TOUTE l'entrée ? O(n), PILE CONSTANTE.

compile : String -> Result RegexError Regex

Compile un motif en Regex. Drapeaux : préfixe GLOBAL (?flags) et SCOPÉ (?flags:…). v1 : i (casse ASCII, foldée à la compilation), s (dotall : . matche \n), u (classes Unicode, cf. plus bas). m (multi-ligne) = à venir (nécessite les ancres ^/$).

data Bit = Zero | One deriving (Eq)
data V = VEmpty | VChr | VLeft V | VRight V | VSeq V V | VStars (List V) | VGroup Int V
  deriving (Eq)
data Match = Match Nat Nat (List (Maybe (Nat, Nat))) (List (String, Int))
  deriving (Eq, Show)

Un match : début, fin (positions 0-basées), une étendue par groupe capturant (1-basé ; Nothing = groupe non apparié), et la table nom→index des groupes nommés ((?<name>…)). group … 0 = match entier. Le Match reste POSITIONNEL (le nom est une métadonnée ; les positions POSIX sont inchangées).

group : Match -> Nat -> Maybe (Nat, Nat)

Étendue d'un groupe (1-basé) ; group m 0 = le match entier.

fullmatch : Regex -> String -> Maybe Match

Match ANCRÉ : la regex doit couvrir TOUTE l'entrée.

findAll : Regex -> String -> List Match

Tous les matches NON CHEVAUCHANTS, de gauche à droite (avance d'≥1 sur un match vide pour garantir la terminaison).

split : Regex -> String -> List String

Découpe l'entrée aux occurrences de r (les séparateurs), en Strings.

replace : Regex -> String -> String -> String

Remplace chaque match par le gabarit repl ($1.. = groupes, $0 = match entier, $$ = '$' littéral, $k non-apparié → "").