module Marvin.Util.Regex
( Regex, Match, r, match
, Re.PCREOption
, Re.anchored, Re.auto_callout
, Re.caseless, Re.dollar_endonly
, Re.dotall, Re.dupnames, Re.extended
, Re.extra, Re.firstline, Re.multiline
, Re.newline_cr
, Re.newline_crlf, Re.newline_lf, Re.no_auto_capture
, Re.ungreedy, Re.utf8, Re.no_utf8_check
, Re.PCREExecOption
, Re.exec_anchored
, Re.exec_newline_cr, Re.exec_newline_crlf, Re.exec_newline_lf
, Re.exec_notbol, Re.exec_noteol, Re.exec_notempty
, Re.exec_no_utf8_check, Re.exec_partial
, unwrapRegex
) where
import Data.String
import qualified Text.Regex.PCRE.Light.Char8 as Re
newtype Regex = Regex Re.Regex
unwrapRegex :: Regex -> Re.Regex
unwrapRegex (Regex r) = r
instance Show Regex where
show = show . unwrapRegex
type Match = [String]
r :: [Re.PCREOption] -> String -> Regex
r opts s = Regex $ Re.compile s opts
instance IsString Regex where
fromString "" = error "Empty regex is not permitted, use '.*' or similar instead"
fromString s = r [] s
match :: [Re.PCREExecOption] -> Regex -> String -> Maybe Match
match opts re s = Re.match (unwrapRegex re) s opts