packages feed

pcre-light 0.4 → 0.4.0.1

raw patch · 8 files changed

+23/−4555 lines, 8 filesdep ~basenew-uploaderPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: base

API changes (from Hackage documentation)

- Text.Regex.PCRE.Light.Base: Regex :: {-# UNPACK #-} !ForeignPtr PCRE -> {-# UNPACK #-} !ByteString -> Regex
+ Text.Regex.PCRE.Light.Base: Regex :: {-# UNPACK #-} !(ForeignPtr PCRE) -> {-# UNPACK #-} !ByteString -> Regex

Files

+ README.md view
@@ -0,0 +1,11 @@++# pcre-light library++A small, efficient and portable regex library for Perl 5 compatible regular expressions++The PCRE library is a set of functions that implement regular+expression pattern matching using the same syntax and semantics as Perl 5.++## Authorship++This library was originally written by Donald Stewart.
− TODO
@@ -1,2 +0,0 @@-* backwards compatibility with older libpcres (e.g. pcre3 on debian)-* some tests fail for strange reasons
Text/Regex/PCRE/Light.hs view
@@ -81,6 +81,13 @@ import qualified Data.ByteString.Base     as S #endif +-- From ghc-7.8 (base-4.7.0.0), unsafePerformIO+-- must be imported from System.IO.Unsafe, since+-- its removal from Foreign.+#if __GLASGOW_HASKELL__ >= 708+import System.IO.Unsafe (unsafePerformIO)+#endif+ -- Foreigns import Foreign import Foreign.Ptr
pcre-light.cabal view
@@ -1,6 +1,6 @@ name:            pcre-light-version:         0.4-homepage:        http://code.haskell.org/~dons/code/pcre-light+version:         0.4.0.1+homepage:        https://github.com/Daniel-Diaz/pcre-light synopsis:        A small, efficient and portable regex library for Perl 5 compatible regular expressions description:     A small, efficient and portable regex library for Perl 5 compatible regular expressions@@ -16,11 +16,11 @@ license-file:    LICENSE copyright:       (c) 2007-2010. Don Stewart <dons@galois.com> author:          Don Stewart-maintainer:      Don Stewart <dons@galois.com>+maintainer:      Daniel Díaz <dhelta.diaz@gmail.com> cabal-version: >= 1.2.0 build-type:      Configure-tested-with:     GHC ==6.8.2, GHC ==6.6.1, GHC ==6.12.1, Hugs ==2005-extra-source-files: configure, pcre-light.buildinfo.in+tested-with:     GHC ==7.8.2, GHC ==6.8.2, GHC ==6.6.1, GHC ==6.12.1+extra-source-files: configure, pcre-light.buildinfo.in, README.md extra-tmp-files:    pcre-light.buildinfo  flag small_base
− tests/Makefile
@@ -1,11 +0,0 @@-all:-	ghc -Onot -fasm Unit.hs --make && ./Unit-#	runhaskell Unit.hs && echo $$?--test::-	ghc -ddump-simpl-stats -lpcre -fhpc --make -i.. -i../dist/build/ Unit.hs -o Unit -O2 -no-recomp-	rm -f *.tix-	./Unit -	hpc report --decl-list       --exclude=Main Unit-	hpc markup --fun-entry-count --exclude=Main Unit-
− tests/Parse.hs
@@ -1,75 +0,0 @@------ A script to translate the pcre.c testsuite into Haskell-----import System.Environment-import System.IO-import Data.Char-import Data.List-import Text.PrettyPrint.HughesPJ--data Test = Test String [String] [Maybe [String]]-       deriving (Eq,Show,Read)--main = do-    [f,g] <- getArgs-    inf   <- readFile f-    outf  <- readFile g--    let in_str  = lines inf-        out_str = lines outf--    let loop [] []     = []-        loop i_xs o_xs = Test r subj results   : loop (dropWhile (=="") i_ys)-                                                      (dropWhile (=="") o_ys)-           where-             ((r:subj),    i_ys) = break (== "") i_xs--             ((_:results'),o_ys) = break (== "") o_xs-             results= [ if s == "No match"-                           then Nothing-                           else Just [s]-                      | s <- filter (not . all isSpace . take 2) results'-                      ]--    print . vcat . intersperse (char ',') . map ppr . loop in_str $ out_str--breakReg ('/':rest) = -  let s = reverse . dropWhile (/= '/') . reverse $ rest--      t = case head (reverse rest) of-               'i' -> ["caseless"]-               '/' -> []-               _   -> ["ERROR"]--  in if s == "" then ("ERROR", [])-                else (init s, t)---breakReg ('"':rest) =-  let s = reverse . dropWhile (/= '"') . reverse $ rest--      t = case head (reverse rest) of-               'i' -> ["caseless"]-               '/' -> []-               _   -> ["ERROR"]--  in if s == "" then ("ERROR", [])-                else (init s, t)--breakReg s          = ("ERROR", [])--ppr :: Test -> Doc-ppr (Test r subjs res) =-    hang (empty <+> text "testRegex" <+> text-       (show (fst $ breakReg r)) <+> -               bracket (case snd (breakReg r) of-                                    [] -> empty-                                    [x] -> text x-                       ))-         4 $-         (bracket $ vcat $ punctuate (char ',') (map (text.show) subjs))-            $+$-         (bracket $ vcat $ punctuate (char ',') (map (text.show) res))--bracket x = char '[' <> x <> char ']'
− tests/Unit.hs
@@ -1,4457 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}--import Text.Regex.PCRE.Light (compile,compileM,match)-import qualified Text.Regex.PCRE.Light.Char8 as String (compile,compileM,match)-import Text.Regex.PCRE.Light.Base --import qualified Data.ByteString.Char8 as S-import System.IO--import Test.HUnit-import System.Exit (exitFailure)-import Control.Monad (when)-import System.IO-import Data.Either-import qualified Data.Map as M--import System.IO.Unsafe-import Control.OldException-import Control.Monad.Error--assertBool'  s = assertBool  (S.unpack s)-assertEqual' s = assertEqual (S.unpack s)--testLabel  s = TestLabel (S.unpack s)--instance Error S.ByteString where-    noMsg = S.empty-    strMsg = S.pack--testRegex :: S.ByteString-     -> [PCREOption]-     -> [S.ByteString]-     -> [Maybe [S.ByteString]]-     -> Test--testRegex regex options inputs outputs = testLabel regex $-  TestCase $ do-     assertEqual' "Input/Output Length Check" (length inputs) (length outputs)--     assertBool' "ByteString regex compile" =<<-      case compile regex options of-        r -> return $-            and [ match r i [] == o-                | (i,o) <- zip inputs outputs ]--     assertBool' "ByteString regex compileM" =<<-      case compileM regex options of-        Left s -> do S.hPutStrLn stderr ("ERROR in ByteString in compileM " `S.append` (S.pack s))-                     return False-        Right r -> return $-            and [ match r i [] == o-                | (i,o) <- zip inputs outputs ]--     assertBool' "String regex" =<<-      case String.compile (S.unpack regex) options of-        r -> return $-            and [ String.match r i [] == o-                | (i,o) <- zip (map (S.unpack) inputs)-                               (map (fmap (map S.unpack)) outputs) ]--     assertBool' "String regex" =<<-      case String.compileM (S.unpack regex) options of-        Left s -> do S.hPutStrLn stderr ("ERROR in String compileM: " `S.append` (S.pack s))-                     return False-        Right r -> return $-            and [ String.match r i [] == o-                | (i,o) <- zip (map (S.unpack) inputs)-                               (map (fmap (map S.unpack)) outputs) ]--main = do counts <- runTestTT tests-          when (errors counts > 0 || failures counts > 0) exitFailure--tests = TestList--    [ testRegex "the quick brown fox" []-           [ "the quick brown fox"-           , "The quick brown FOX"-           , "What do you know about the quick brown fox?"-           , "What do you know about THE QUICK BROWN FOX?"-           ]-           [ Just ["the quick brown fox"]-           , Nothing-           , Just ["the quick brown fox"]-           , Nothing-           ]--    , testLabel "compile failure" $-            TestCase $ (assertBool' "compile failure" $-                Left ("nothing to repeat" ) == compileM "*" [])--    , testLabel "compile failure" $-            TestCase $ (assertBool' "compile failure" =<< (return $-                    (Just ("Text.Regex.PCRE.Light: Error in regex: nothing to repeat"))-                    ==-                    (unsafePerformIO $ do-                        handle (\e -> return (Just (S.pack $ show e)))-                               (compile "*" [] `seq` return Nothing))))----  , testRegex "\0*" [] -- the embedded null in the pattern seems to be a problem---      ["\0\0\0\0"]---      [Just ["\0\0\0\0"]]--    , testRegex "\1*" [] -- the embedded null in the pattern seems to be a problem-        ["\1\1\1\1"]-        [Just ["\1\1\1\1"]]--    , testRegex "The quick brown fox" [caseless]-           ["the quick brown fox"-           ,"The quick brown FOX"-           ,"What do you know about the quick brown fox?"-           ,"What do you know about THE QUICK BROWN FOX?"-           ]-           [ Just ["the quick brown fox"]-           , Just ["The quick brown FOX"]-           , Just ["the quick brown fox"]-           , Just ["THE QUICK BROWN FOX"]-           ]--     , testRegex "a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" []-           ["abxyzpqrrrabbxyyyypqAzz"-           ,"abxyzpqrrrabbxyyyypqAzz"-           ,"aabxyzpqrrrabbxyyyypqAzz"-           ,"aaabxyzpqrrrabbxyyyypqAzz"-           ,"aaaabxyzpqrrrabbxyyyypqAzz"-           ,"abcxyzpqrrrabbxyyyypqAzz"-           ,"aabcxyzpqrrrabbxyyyypqAzz"-           ,"aaabcxyzpqrrrabbxyyyypAzz"-           ,"aaabcxyzpqrrrabbxyyyypqAzz"-           ,"aaabcxyzpqrrrabbxyyyypqqAzz"-           ,"aaabcxyzpqrrrabbxyyyypqqqAzz"-           ,"aaabcxyzpqrrrabbxyyyypqqqqAzz"-           ,"aaabcxyzpqrrrabbxyyyypqqqqqAzz"-           ,"aaabcxyzpqrrrabbxyyyypqqqqqqAzz"-           ,"aaaabcxyzpqrrrabbxyyyypqAzz"-           ,"abxyzzpqrrrabbxyyyypqAzz"-           ,"aabxyzzzpqrrrabbxyyyypqAzz"-           ,"aaabxyzzzzpqrrrabbxyyyypqAzz"-           ,"aaaabxyzzzzpqrrrabbxyyyypqAzz"-           ,"abcxyzzpqrrrabbxyyyypqAzz"-           ,"aabcxyzzzpqrrrabbxyyyypqAzz"-           ,"aaabcxyzzzzpqrrrabbxyyyypqAzz"-           ,"aaaabcxyzzzzpqrrrabbxyyyypqAzz"-           ,"aaaabcxyzzzzpqrrrabbbxyyyypqAzz"-           ,"aaaabcxyzzzzpqrrrabbbxyyyyypqAzz"-           ,"aaabcxyzpqrrrabbxyyyypABzz"-           ,"aaabcxyzpqrrrabbxyyyypABBzz"-           ,">>>aaabxyzpqrrrabbxyyyypqAzz"-           ,">aaaabxyzpqrrrabbxyyyypqAzz"-           ,">>>>abcxyzpqrrrabbxyyyypqAzz"-           ,"abxyzpqrrabbxyyyypqAzz"-           ,"abxyzpqrrrrabbxyyyypqAzz"-           ,"abxyzpqrrrabxyyyypqAzz"-           ,"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz"-           ,"aaaabcxyzzzzpqrrrabbbxyyypqAzz"-           ,"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz"-           ]--           [ Just ["abxyzpqrrrabbxyyyypqAzz"]-           , Just ["abxyzpqrrrabbxyyyypqAzz"]-           , Just ["aabxyzpqrrrabbxyyyypqAzz"]-           , Just ["aaabxyzpqrrrabbxyyyypqAzz"]-           , Just ["aaaabxyzpqrrrabbxyyyypqAzz"]-           , Just ["abcxyzpqrrrabbxyyyypqAzz"]-           , Just ["aabcxyzpqrrrabbxyyyypqAzz"]-           , Just ["aaabcxyzpqrrrabbxyyyypAzz"]-           , Just ["aaabcxyzpqrrrabbxyyyypqAzz"]-           , Just ["aaabcxyzpqrrrabbxyyyypqqAzz"]-           , Just ["aaabcxyzpqrrrabbxyyyypqqqAzz"]-           , Just ["aaabcxyzpqrrrabbxyyyypqqqqAzz"]-           , Just ["aaabcxyzpqrrrabbxyyyypqqqqqAzz"]-           , Just ["aaabcxyzpqrrrabbxyyyypqqqqqqAzz"]-           , Just ["aaaabcxyzpqrrrabbxyyyypqAzz"]-           , Just ["abxyzzpqrrrabbxyyyypqAzz"]-           , Just ["aabxyzzzpqrrrabbxyyyypqAzz"]-           , Just ["aaabxyzzzzpqrrrabbxyyyypqAzz"]-           , Just ["aaaabxyzzzzpqrrrabbxyyyypqAzz"]-           , Just ["abcxyzzpqrrrabbxyyyypqAzz"]-           , Just ["aabcxyzzzpqrrrabbxyyyypqAzz"]-           , Just ["aaabcxyzzzzpqrrrabbxyyyypqAzz"]-           , Just ["aaaabcxyzzzzpqrrrabbxyyyypqAzz"]-           , Just ["aaaabcxyzzzzpqrrrabbbxyyyypqAzz"]-           , Just ["aaaabcxyzzzzpqrrrabbbxyyyyypqAzz"]-           , Just ["aaabcxyzpqrrrabbxyyyypABzz"]-           , Just ["aaabcxyzpqrrrabbxyyyypABBzz"]-           , Just ["aaabxyzpqrrrabbxyyyypqAzz"]-           , Just ["aaaabxyzpqrrrabbxyyyypqAzz"]-           , Just ["abcxyzpqrrrabbxyyyypqAzz"]-           , Nothing-           , Nothing-           , Nothing-           , Nothing-           , Nothing-           , Nothing-           ]--    , testRegex "^(abc){1,2}zz" []-        ["abczz"-        ,"abcabczz"-        ,"zz"-        ,"abcabcabczz"-        ,">>abczz"]-        [ Just ["abczz","abc"]-        , Just ["abcabczz", "abc"]-        , Nothing-        , Nothing-        , Nothing ]--    , testRegex "^(b+?|a){1,2}?c" []-        ["bc",-         "bbc",-         "bbbc",-         "bac",-         "bbac",-         "aac",-         "abbbbbbbbbbbc",-         "bbbbbbbbbbbac",-         "aaac",-         "abbbbbbbbbbbac"]--        [Just ["bc", "b"],-         Just ["bbc", "b"],-         Just ["bbbc", "bb"],-         Just ["bac", "a"],-         Just ["bbac", "a"],-         Just ["aac", "a"],-         Just ["abbbbbbbbbbbc", "bbbbbbbbbbb"],-         Just ["bbbbbbbbbbbac", "a"],-         Nothing,-         Nothing]--    , testRegex "^(b+|a){1,2}c" []-        ["bc",-         "bbc",-         "bbbc",-         "bac",-         "bbac",-         "aac",-         "abbbbbbbbbbbc",-         "bbbbbbbbbbbac",-         "aaac",-         "abbbbbbbbbbbac"]-        [Just ["bc", "b"],-         Just ["bbc", "bb"],-         Just ["bbbc", "bbb"],-         Just ["bac", "a"],-         Just ["bbac", "a"],-         Just ["aac", "a"],-         Just ["abbbbbbbbbbbc", "bbbbbbbbbbb"],-         Just ["bbbbbbbbbbbac", "a"],-         Nothing,-         Nothing]--    , testRegex "^(b+|a){1,2}?bc" []-        ["bbc"]-        [Just ["bbc", "b"]]--    , testRegex "^(b*|ba){1,2}?bc" []-        ["babc",-         "bbabc",-         "bababc",-         "bababbc",-         "babababc"]-        [Just ["babc","ba"],-         Just ["bbabc","ba"],-         Just ["bababc","ba"],-         Nothing,-         Nothing]--    , testRegex "^(ba|b*){1,2}?bc" []-        ["babc",-         "bbabc",-         "bababc",-         "bababbc",-         "babababc"]-        [Just ["babc","ba"],-         Just ["bbabc","ba"],-         Just ["bababc","ba"],-         Nothing,-         Nothing]--    , testRegex "^[ab\\]cde]" []-        ["athing",-         "bthing",-         "]thing",-         "cthing",-         "dthing",-         "ething",-         "fthing",-         "[thing",-         "\\\\thing"]-        [Just ["a"],-         Just ["b"],-         Just ["]"],-         Just ["c"],-         Just ["d"],-         Just ["e"],-         Nothing,-         Nothing,-         Nothing]--    , testRegex "^[]cde]" []-        ["]thing",-         "cthing",-         "dthing",-         "ething",-         "athing",-         "fthing"]-        [Just ["]"],-         Just ["c"],-         Just ["d"],-         Just ["e"],-         Nothing,-         Nothing]--    , testRegex "^[^ab\\]cde]" []-        ["fthing",-         "[thing",-         "\\\\thing",-         "athing",-         "bthing",-         "]thing",-         "cthing",-         "dthing",-         "ething"]-        [Just ["f"],-         Just ["["],-         Just ["\\"],-         Nothing,-         Nothing,-         Nothing,-         Nothing,-         Nothing,-         Nothing]--    , testRegex "^\129" []-        ["\129"]-        [Just ["\x81"]]--    , testRegex "^\255" []-        ["\255"]-        [Just ["\xff"]]--    , testRegex "^[0-9]+$" []-        ["0",-         "1",-         "2",-         "3",-         "4",-         "5",-         "6",-         "7",-         "8",-         "9",-         "10",-         "100",-         "abc"]-        [Just ["0"],-         Just ["1"],-         Just ["2"],-         Just ["3"],-         Just ["4"],-         Just ["5"],-         Just ["6"],-         Just ["7"],-         Just ["8"],-         Just ["9"],-         Just ["10"],-         Just ["100"],-         Nothing]--    , testRegex "^.*nter" []-        ["enter",-         "inter",-         "uponter"]-        [Just ["enter"],-         Just ["inter"],-         Just ["uponter"]]--    , testRegex "^xxx[0-9]+$" []-        ["xxx0",-         "xxx1234",-         "xxx"]-        [Just ["xxx0"],-         Just ["xxx1234"],-         Nothing]--    , testRegex "^.+[0-9][0-9][0-9]$" []-        ["x123",-         "xx123",-         "123456",-         "123",-         "x1234"]-        [Just ["x123"],-         Just ["xx123"],-         Just ["123456"],-         Nothing,-         Just ["x1234"]]--    , testRegex "^.+?[0-9][0-9][0-9]$" []-        ["x123",-         "xx123",-         "123456",-         "123",-         "x1234"]-        [Just ["x123"],-         Just ["xx123"],-         Just ["123456"],-         Nothing,-         Just ["x1234"]]--    -- test matching more than 1 subpattern-    , testRegex "^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$" []-        ["abc!pqr=apquxz.ixr.zzz.ac.uk",-         "!pqr=apquxz.ixr.zzz.ac.uk",-         "abc!=apquxz.ixr.zzz.ac.uk",-         "abc!pqr=apquxz:ixr.zzz.ac.uk",-         "abc!pqr=apquxz.ixr.zzz.ac.ukk"]-        [Just ["abc!pqr=apquxz.ixr.zzz.ac.uk", "abc", "pqr"],-         Nothing,-         Nothing,-         Nothing,-         Nothing]--    , testRegex ":" []-        ["Well, we need a colon: somewhere",-         "*** Fail if we don't"]-        [Just [":"],-         Nothing]--    , testRegex "([\\da-f:]+)$" [caseless]-        ["0abc",-         "abc",-         "fed",-         "E",-         "::",-         "5f03:12C0::932e",-         "fed def",-         "Any old stuff",-         "*** Failers",-         "0zzz",-         "gzzz",-         "fed\x20",-         "Any old rubbish"]-        [Just ["0abc", "0abc"],-         Just ["abc", "abc"],-         Just ["fed", "fed"],-         Just ["E", "E"],-         Just ["::", "::"],-         Just ["5f03:12C0::932e", "5f03:12C0::932e"],-         Just ["def", "def"],-         Just ["ff", "ff"],-         Nothing,-         Nothing,-         Nothing,-         Nothing,-         Nothing]--    , testRegex "^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$" []-        [".1.2.3",-         "A.12.123.0",-         ".1.2.3333",-         "1.2.3",-         "1234.2.3"]-        [Just [".1.2.3", "1", "2", "3"],-         Just ["A.12.123.0", "12", "123", "0"],-         Nothing,-         Nothing,-         Nothing]--    , testRegex "^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$" []-        ["1 IN SOA non-sp1 non-sp2(",-         "1    IN    SOA    non-sp1    non-sp2   (",-         "1IN SOA non-sp1 non-sp2("]-        [Just ["1 IN SOA non-sp1 non-sp2(", "1", "non-sp1", "non-sp2"],-         Just ["1    IN    SOA    non-sp1    non-sp2   (", "1", "non-sp1", "non-sp2"],-         Nothing]--    , testRegex "^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$" []-        ["a.",-         "Z.",-         "2.",-         "ab-c.pq-r.",-         "sxk.zzz.ac.uk.",-         "x-.y-.",-         "*** Failers",-         "-abc.peq."]-        [Just ["a."],-         Just ["Z."],-         Just ["2."],-         Just ["ab-c.pq-r.", ".pq-r"],-         Just ["sxk.zzz.ac.uk.", ".uk"],-         Just ["x-.y-.", ".y-"],-         Nothing,-         Nothing]--    , testRegex "^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" []-        ["*.a",-         "*.b0-a",-         "*.c3-b.c",-         "*.c-a.b-c",-         "*** Failers",-         "*.0",-         "*.a-",-         "*.a-b.c-",-         "*.c-a.0-c"]-        [Just ["*.a"],-         Just ["*.b0-a", "0-a"],-         Just ["*.c3-b.c", "3-b", ".c"],-         Just ["*.c-a.b-c", "-a", ".b-c", "-c"],-         Nothing,-         Nothing,-         Nothing,-         Nothing,-         Nothing]--    , testRegex "^(?=ab(de))(abd)(e)" []-        ["abde"]-        [Just ["abde", "de", "abd", "e"]]--    , testRegex "^(?!(ab)de|x)(abd)(f)" []-        ["abdf"]-        [Just ["abdf", "", "abd", "f"]]--    , testRegex "^(?=(ab(cd)))(ab)" []-        ["abcd"]-        [Just ["ab", "abcd", "cd", "ab"]]--    , testRegex "^[\\da-f](\\.[\\da-f])*$" [caseless]-        ["a.b.c.d",-         "A.B.C.D",-         "a.b.c.1.2.3.C"]-        [Just ["a.b.c.d", ".d"],-         Just ["A.B.C.D", ".D"],-         Just ["a.b.c.1.2.3.C", ".C"]]--    , testRegex "^\".*\"\\s*(;.*)?$" []-        ["\"1234\"",-         "\"abcd\" ;",-         "\"\" ; rhubarb",-         "*** Failers",-         "\\\"1234\\\" : things"]-        [Just ["\"1234\""],-         Just ["\"abcd\" ;", ";"],-         Just ["\"\" ; rhubarb", "; rhubarb"],-         Nothing,-         Nothing]--    , testRegex "^$" []-        ["",-         "*** Failers"]-        [Just [""],-         Nothing]--    , testRegex "   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)" [extended]-        ["ab c",-         "*** Failers",-         "abc",-         "ab cde"]-        [Just ["ab c"],-         Nothing,-         Nothing,-         Nothing]--    , testRegex "(?x)   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)" []-        ["ab c",-         "*** Failers",-         "abc",-         "ab cde"]-        [Just ["ab c"],-         Nothing,-         Nothing,-         Nothing]--    , testRegex "^   a\\ b[c ]d       $" [extended]-        ["a bcd",-         "a b d",-         "*** Failers",-         "abcd",-         "ab d"]-        [Just ["a bcd"],-         Just ["a b d"],-         Nothing,-         Nothing,-         Nothing]--    , testRegex "^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$" []-        ["abcdefhijklm"]-        [Just ["abcdefhijklm",-               "abc", "bc",-               "c", "def",-               "ef", "f",-               "hij", "ij",-               "j", "klm",-               "lm", "m"]]--    , testRegex "^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$" []-        ["abcdefhijklm"]-        [Just ["abcdefhijklm",-             "bc", "c", "ef", "f", "ij", "j", "lm", "m"]]--    , testRegex "^[.^$|()*+?{,}]+" []-        [".^$(*+)|{?,?}"]-        [Just [".^$(*+)|{?,?}"]]--    , testRegex "^a*\\w" []-        ["z",-         "az",-         "aaaz",-         "a",-         "aa",-         "aaaa",-         "a+",-         "aa+"]-        [Just ["z"],-         Just ["az"],-         Just ["aaaz"],-         Just ["a"],-         Just ["aa"],-         Just ["aaaa"],-         Just ["a"],-         Just ["aa"]]--    , testRegex "^a*?\\w" []-        ["z",-         "az",-         "aaaz",-         "a",-         "aa",-         "aaaa",-         "a+",-         "aa+"]-        [Just ["z"],-         Just ["a"],-         Just ["a"],-         Just ["a"],-         Just ["a"],-         Just ["a"],-         Just ["a"],-         Just ["a"]]--    , testRegex "^a+\\w" []-        ["az",-         "aaaz",-         "aa",-         "aaaa",-         "aa+"]-        [Just ["az"],-         Just ["aaaz"],-         Just ["aa"],-         Just ["aaaa"],-         Just ["aa"]]--    , testRegex "^a+?\\w" []-        ["az",-         "aaaz",-         "aa",-         "aaaa",-         "aa+"]-        [Just ["az"],-         Just ["aa"],-         Just ["aa"],-         Just ["aa"],-         Just ["aa"]]--    , testRegex "^\\d{8}\\w{2,}" []-        ["1234567890",-         "12345678ab",-         "12345678__",-         "*** Failers",-         "1234567"]-        [Just ["1234567890"],-         Just ["12345678ab"],-         Just ["12345678__"],-         Nothing,-         Nothing]--    , testRegex "^[aeiou\\d]{4,5}$" []-        ["uoie",-         "1234",-         "12345",-         "aaaaa",-         "*** Failers",-         "123456"]-        [Just ["uoie"],-         Just ["1234"],-         Just ["12345"],-         Just ["aaaaa"],-         Nothing,-         Nothing]--    , testRegex "^[aeiou\\d]{4,5}?" []-        ["uoie",-         "1234",-         "12345",-         "aaaaa",-         "123456"]-        [Just ["uoie"],-         Just ["1234"],-         Just ["1234"],-         Just ["aaaa"],-         Just ["1234"]]--    , testRegex "\\A(abc|def)=(\\1){2,3}\\Z" []-        ["abc=abcabc",-         "def=defdefdef",-         "*** Failers",-         "abc=defdef"]-        [Just ["abc=abcabc", "abc", "abc"],-         Just ["def=defdefdef", "def", "def"],-         Nothing,-         Nothing]--    , testRegex "^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$" []-        ["abcdefghijkcda2",-         "abcdefghijkkkkcda2"]-        [Just ["abcdefghijkcda2", "a", "b",-         "c", "d", "e", "f", "g", "h", "i", "j", "k", "cd"],--         Just ["abcdefghijkkkkcda2", "a", "b", "c", "d",-             "e", "f", "g", "h", "i", "j", "k", "cd"]]--    , testRegex "(cat(a(ract|tonic)|erpillar)) \\1()2(3)" []-        ["cataract cataract23",-         "catatonic catatonic23",-         "caterpillar caterpillar23"]--        [Just ["cataract cataract23", "cataract", "aract", "ract", "", "3"],--         Just ["catatonic catatonic23", "catatonic", "atonic", "tonic", "", "3"],--         Just ["caterpillar caterpillar23", "caterpillar", "erpillar", "", "", "3"]]--    , testRegex "^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]" []-        ["From abcd  Mon Sep 01 12:33:02 1997"]-        [Just ["From abcd  Mon Sep 01 12:33", "abcd"]]--    , testRegex "^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d" []-        ["From abcd  Mon Sep 01 12:33:02 1997",-         "From abcd  Mon Sep  1 12:33:02 1997",-         "*** Failers",-         "From abcd  Sep 01 12:33:02 1997"]-        [Just ["From abcd  Mon Sep 01 12:33", "Sep "],-         Just ["From abcd  Mon Sep  1 12:33", "Sep  "],-         Nothing,-         Nothing]--    , testRegex "\\w+(?=\t)" []-        ["the quick brown\t fox"]-        [Just ["brown"]]--    , testRegex "foo(?!bar)(.*)" []-        ["foobar is foolish see?"]-        [Just ["foolish see?", "lish see?"]]--    , testRegex "(?:(?!foo)...|^.{0,2})bar(.*)" []-        ["foobar crowbar etc",-         "barrel",-         "2barrel",-         "A barrel"]-        [Just ["rowbar etc", " etc"],-         Just ["barrel",     "rel"],-         Just ["2barrel",    "rel"],-         Just ["A barrel",   "rel"]]--    , testRegex "^(\\D*)(?=\\d)(?!123)" []-        ["abc456",-         "*** Failers",-         "abc123"]-        [Just ["abc", "abc"],-         Nothing,-         Nothing]--    , testRegex "^(a)\\1{2,3}(.)" []-        ["aaab",-         "aaaab",-         "aaaaab",-         "aaaaaab"]-        [Just ["aaab", "a","b"],-         Just ["aaaab","a","b"],-         Just ["aaaaa","a","a"],-         Just ["aaaaa","a","a"]]--    , testRegex "(?!^)abc" []-        ["the abc",-         "*** Failers",-         "abc"]-        [Just ["abc"],-         Nothing,-         Nothing]--    , testRegex "(?=^)abc" []-        ["abc",-         "*** Failers",-         "the abc"]-        [Just ["abc"],-         Nothing,-         Nothing]--    , testRegex "^[ab]{1,3}(ab*|b)" []-        ["aabbbbb"]-        [Just ["aabb", "b"]]--    , testRegex "^[ab]{1,3}?(ab*|b)" []-        ["aabbbbb"]-        [Just ["aabbbbb", "abbbbb"]]--    , testRegex "^[ab]{1,3}?(ab*?|b)" []-        ["aabbbbb"]-        [Just ["aa", "a"]]--    , testRegex "^[ab]{1,3}(ab*?|b)" []-        ["aabbbbb"]-        [Just ["aabb", "b"]]--    , testRegex "^(cow|)\\1(bell)" []-        ["cowcowbell",-         "bell",-         "*** Failers",-         "cowbell"]-        [Just ["cowcowbell", "cow", "bell"],-         Just ["bell", "", "bell"],-         Nothing,-         Nothing]--    , testRegex "^\\s" []-        ["\o40abc",-         "\nabc",-         "\rabc",-         "\tabc",-         "abc"]-        [Just [" "],-         Just ["\x0a"],-         Just ["\x0d"],-         Just ["\x09"],-         Nothing]--    , testRegex "^(a|)\\1*b" []-        ["ab",-         "aaaab",-         "b",-         "acb"]-        [Just ["ab", "a"],-         Just ["aaaab", "a"],-         Just ["b", ""],-         Nothing]--    , testRegex "^(a|)\\1+b" []-        ["aab",-         "aaaab",-         "b",-         "*** Failers",-         "ab"]-        [Just ["aab", "a"],-         Just ["aaaab", "a"],-         Just ["b", ""],-         Nothing,-         Nothing]--    , testRegex "^(a|)\\1?b" []-        ["ab",-         "aab",-         "b",-         "acb"]-        [Just ["ab", "a"],-         Just ["aab", "a"],-         Just ["b", ""],-         Nothing]--    , testRegex "^(a|)\\1{2}b" []-        ["aaab",-         "b",-         "ab",-         "aab",-         "aaaab"]-        [Just ["aaab", "a"],-         Just ["b", ""],-         Nothing,-         Nothing,-         Nothing]--    , testRegex "^(a|)\\1{2,3}b" []-        ["aaab",-         "aaaab",-         "b",-         "ab",-         "aab",-         "aaaaab"]-        [Just ["aaab", "a"],-         Just ["aaaab", "a"],-         Just ["b", ""],-         Nothing,-         Nothing,-         Nothing]--    , testRegex "ab{1,3}bc" []-        ["abbbbc",-         "abbbc",-         "abbc",-         "abc",-         "abbbbbc"]-        [Just ["abbbbc"],-         Just ["abbbc"],-         Just ["abbc"],-         Nothing,-         Nothing]--    , testRegex "([^.]*)\\.([^:]*):[T ]+(.*)" []-        ["track1.title:TBlah blah blah"]-        [Just ["track1.title:TBlah blah blah", "track1", "title", "Blah blah blah"]]--    , testRegex "([^.]*)\\.([^:]*):[T ]+(.*)" [caseless]-        ["track1.title:TBlah blah blah"]-        [Just ["track1.title:TBlah blah blah", "track1", "title", "Blah blah blah"]]--    , testRegex "([^.]*)\\.([^:]*):[t ]+(.*)" [caseless]-        ["track1.title:TBlah blah blah"]-        [Just ["track1.title:TBlah blah blah", "track1", "title", "Blah blah blah"]]--    , testRegex "^[W-c]+$" []-        ["WXY_^abc",-         "wxy"]-        [Just ["WXY_^abc"],-         Nothing]--    , testRegex "^[W-c]+$" [caseless]-        ["WXY_^abc",-         "wxy_^ABC"]-        [Just ["WXY_^abc"],-         Just ["wxy_^ABC"]]--    , testRegex "^[\\x3f-\\x5F]+$" [caseless]-        ["WXY_^abc",-         "wxy_^ABC"]-        [Just ["WXY_^abc"],-         Just ["wxy_^ABC"]]--    , testRegex "^abc$" []-        ["abc",-         "qqq\\nabc",-         "abc\\nzzz",-         "qqq\\nabc\\nzzz"]-        [Just ["abc"],-         Nothing,-         Nothing,-         Nothing]--    , testRegex "(?:b)|(?::+)" []-        ["b::c",-         "c::b"]-        [Just ["b"],-         Just ["::"]]--    , testRegex "[-az]+" []-        ["az-",-         "*** Failers",-         "b"]-        [Just ["az-"],-         Just ["a"],-         Nothing]--    , testRegex "[az-]+" []-        ["za-",-         "*** Failers",-         "b"]-        [Just ["za-"],-         Just ["a"],-         Nothing]--    , testRegex "[a\\-z]+" []-        ["a-z",-         "*** Failers",-         "b"]-        [Just ["a-z"],-         Just ["a"],-         Nothing]--    , testRegex "[a-z]+" []-        ["abcdxyz"]-        [Just ["abcdxyz"]]--    , testRegex "[\\d-]+" []-        ["12-34",-         "aaa"]-        [Just ["12-34"],-         Nothing]-    , testRegex "[\\d-z]+" []-        ["12-34z",-         "aaa"]-        [Just ["12-34z"],-         Nothing]--    , testRegex "\\x20Z" []-        ["the Zoo",-         "*** Failers",-         "Zulu"]-        [Just [" Z"],-         Nothing,-         Nothing]--    , testRegex "(abc)\\1" [caseless]-        ["abcabc",-         "ABCabc",-         "abcABC"]-        [Just ["abcabc", "abc"],-         Just ["ABCabc", "ABC"],-         Just ["abcABC", "abc"]]--    , testRegex "ab{3cd" []-        ["ab{3cd"]-        [Just ["ab{3cd"]]--    , testRegex "ab{3,cd" []-        ["ab{3,cd"]-        [Just ["ab{3,cd"]]--    , testRegex "ab{3,4a}cd" []-        ["ab{3,4a}cd"]-        [Just ["ab{3,4a}cd"]]--    , testRegex "{4,5a}bc" []-        ["{4,5a}bc"]-        [Just ["{4,5a}bc"]]--    , testRegex "abc$" []-        ["abc",-         "abc\n",-         "*** Failers",-         "abc\ndef"]-        [Just ["abc"],-         Just ["abc"],-         Nothing,-         Nothing]--    , testRegex "(abc)\\123" []-        ["abc\x53"]-        [Just ["abcS", "abc"]]--    , testRegex "(abc)\\223" []-        ["abc\x93"]-        [Just ["abc\x93", "abc"]]--    , testRegex "(abc)\\323" []-        ["abc\xd3"]-        [Just ["abc\xd3", "abc"]]--    , testRegex "(abc)\\100" []-        ["abc\x40",-         "abc\o100"]-        [Just ["abc@", "abc"],-         Just ["abc@", "abc"]]--    , testRegex "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123" []-        ["abcdefghijkllS"]-        [Just ["abcdefghijkllS",-             "a",-             "b",-             "c",-             "d",-             "e",-             "f",-             "g",-             "h",-             "i",-             "j",-             "k",-             "l"]]--     , testRegex "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123" []-        ["abcdefghijk\o12S"]-        [Just ["abcdefghijk\x0aS",-             "a",-             "b",-             "c",-             "d",-             "e",-             "f",-             "g",-             "h",-             "i",-             "j",-             "k"]]--    , testRegex "ab\\idef" []-        ["abidef"]-        [Just ["abidef"]]--    , testRegex "a{0}bc" []-        ["bc"]-        [Just ["bc"]]--    , testRegex "(a|(bc)){0,0}?xyz" []-        ["xyz"]-        [Just ["xyz"]]--    , testRegex "(?s)a.b" []-        ["a\nb"]-        [Just ["a\nb"]]--    , testRegex "^([^a])([^\\b])([^c]*)([^d]{3,4})" []-        ["baNOTccccd",-         "baNOTcccd",-         "baNOTccd",-         "bacccd",-         "anything",-         "b\bc   ",-         "baccd"]-        [Just ["baNOTcccc", "b", "a", "NOT", "cccc"],-         Just ["baNOTccc", "b", "a", "NOT", "ccc"],-         Just ["baNOTcc", "b", "a", "NO", "Tcc"],-         Just ["baccc", "b", "a", "", "ccc"],-         Nothing,-         Nothing,-         Nothing]--    , testRegex "^\\d{8,}\\@.+[^k]$" []-        ["12345678@a.b.c.d",-         "123456789@x.y.z",-         "*** Failers",-         "12345678@x.y.uk",-         "1234567@a.b.c.d       "]-        [Just ["12345678@a.b.c.d"],-         Just ["123456789@x.y.z"],-         Nothing,-         Nothing,-         Nothing]--    , testRegex "(a)\\1{8,}" []-        ["aaaaaaaaa",-         "aaaaaaaaaa",-         "*** Failers",-         "aaaaaaa   "]-        [Just ["aaaaaaaaa", "a"],-         Just ["aaaaaaaaaa", "a"],-         Nothing,-         Nothing]--    , testRegex "[^a]" []-        ["aaaabcd",-         "aaAabcd "]-        [Just ["b"],-         Just ["A"]]--    , testRegex "[^a]" [caseless]-        ["aaaabcd",-         "aaAabcd "]-        [Just ["b"],-         Just ["b"]]--    , testRegex "[^az]" []-        ["aaaabcd",-         "aaAabcd "]-        [Just ["b"],-         Just ["A"]]--    , testRegex "[^az]" [caseless]-        ["aaaabcd",-         "aaAabcd "]-        [Just ["b"],-         Just ["b"]]--    , testRegex "P[^*]TAIRE[^*]{1,6}?LL" []-        ["xxxxxxxxxxxPSTAIREISLLxxxxxxxxx"]-        [Just ["PSTAIREISLL"]]--    , testRegex "P[^*]TAIRE[^*]{1,}?LL" []-        ["xxxxxxxxxxxPSTAIREISLLxxxxxxxxx"]-        [Just ["PSTAIREISLL"]]--    , testRegex "(.*?)(\\d+)" []-        ["I have 2 numbers: 53147"]-        [Just ["I have 2", "I have ", "2"]]--    , testRegex "(.*)(\\d+)$" []-        ["I have 2 numbers: 53147"]-        [Just ["I have 2 numbers: 53147", "I have 2 numbers: 5314", "7"]]--    , testRegex "(.*?)(\\d+)$" []-        ["I have 2 numbers: 53147"]-        [Just ["I have 2 numbers: 53147", "I have 2 numbers: ", "53147"]]--    , testRegex "(.*)\\b(\\d+)$" []-        ["I have 2 numbers: 53147"]-        [Just ["I have 2 numbers: 53147", "I have 2 numbers: ", "53147"]]--    , testRegex "(.*\\D)(\\d+)$" []-        ["I have 2 numbers: 53147"]-        [Just ["I have 2 numbers: 53147", "I have 2 numbers: ", "53147"]]--    , testRegex "word (?:[a-zA-Z0-9]+ ){0,10}otherword" []-        ["word cat dog elephant mussel cow horse canary baboon snake shark otherword",-         "word cat dog elephant mussel cow horse canary baboon snake shark"]-        [Just ["word cat dog elephant mussel cow horse canary baboon snake shark otherword"],-         Nothing]--    , testRegex "word (?:[a-zA-Z0-9]+ ){0,300}otherword" []-        ["word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope"]-        [Nothing]-    , testRegex "^(a){0,0}" []-        ["bcd",-         "abc",-         "aab     "]-        [Just [""],-         Just [""],-         Just [""]]--    , testRegex "^(a){0,1}" []-        ["bcd",-         "abc",-         "aab  "]-        [Just [""],-         Just ["a", "a"],-         Just ["a", "a"]]--    , testRegex "^(a){0,2}" []-        ["bcd",-         "abc",-         "aab  "]-        [Just [""],-         Just ["a", "a"],-         Just ["aa", "a"]]--    , testRegex "^(a){0,3}" []-        ["bcd",-         "abc",-         "aab",-         "aaa   "]-        [Just [""],-         Just ["a", "a"],-         Just ["aa", "a"],-         Just ["aaa", "a"]]--    , testRegex "^(a){0,3}" []-        ["bcd",-         "abc",-         "aab",-         "aaa   "]-        [Just [""],-         Just ["a", "a"],-         Just ["aa", "a"],-         Just ["aaa", "a"]]--    , testRegex "^(a){0,}" []-        ["bcd",-         "abc",-         "aab",-         "aaa",-         "aaaaaaaa    "]-        [Just [""],-         Just ["a", "a"],-         Just ["aa", "a"],-         Just ["aaa", "a"],-         Just ["aaaaaaaa", "a"]]--    , testRegex "^(a){1,1}" []-        ["bcd",-         "abc",-         "aab  "]-        [Nothing,-         Just ["a", "a"],-         Just ["a", "a"]]--    , testRegex "^(a){1,2}" []-        ["bcd",-         "abc",-         "aab  "]-        [Nothing,-         Just ["a", "a"],-         Just ["aa", "a"]]--    , testRegex "^(a){1,3}" []-        ["bcd",-         "abc",-         "aab",-         "aaa   "]-        [Nothing,-         Just ["a", "a"],-         Just ["aa", "a"],-         Just ["aaa", "a"]]--    , testRegex ".*\\.gif" []-        ["borfle\nbib.gif\nno"]-        [Just ["bib.gif"]]--    , testRegex ".{0,}\\.gif" []-        ["borfle\nbib.gif\nno"]-        [Just ["bib.gif"]]--    , testRegex ".*\\.gif" [multiline]-        ["borfle\nbib.gif\nno"]-        [Just ["bib.gif"]]--    , testRegex ".*\\.gif" [dotall]-        ["borfle\nbib.gif\nno"]-        [Just ["borfle\nbib.gif"]]--    , testRegex ".*$" [multiline]-        ["borfle\nbib.gif\nno"]-        [Just ["borfle"]]--    , testRegex ".*$" [dotall]-        ["borfle\nbib.gif\nno"]-        [Just ["borfle\nbib.gif\nno"]]--    , testRegex ".*$" [multiline]-        ["borfle\nbib.gif\nno\\n"]-        [Just ["borfle"]]--    , testRegex "(?ms)^B" []-        ["abc\nB"]-        [Just ["B"]]--    , testRegex "(?s)B$" []-        ["B\n"]-        [Just ["B"]]--    , testRegex "^[abcdefghijklmnopqrstuvwxy0123456789]" []-        ["n",-         "z "]-        [Just ["n"],-         Nothing]--    , testRegex "abcde{0,0}" []-        ["abcd",-         "abce  "]-        [Just ["abcd"],-         Nothing]--    , testRegex "^(b+?|a){1,2}?c" []-        ["bac",-         "bbac",-         "bbbac",-         "bbbbac",-         "bbbbbac "]-        [Just ["bac","a"],-         Just ["bbac","a"],-         Just ["bbbac","a"],-         Just ["bbbbac","a"],-         Just ["bbbbbac","a"]]--    , testRegex "(AB)*?\\1" []-        ["ABABAB"]-        [Just ["ABAB", "AB"]]--    , testRegex "(.*(.)?)*" []-        ["abcd"]-        [Just ["abcd", ""]]--{--    , testRegex "(?:a|)*\\d" []-        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",-         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]-        [Nothing,-         Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]--}--    , testRegex "^(?:a(?:(?:))+)+" []-        ["aaaa"]-        [Just ["aaaa"]]--    , testRegex "^(a()+)+" []-        ["aaaa"]-        [Just ["aaaa", "a", ""]]--    , testRegex "^(?:a(?:(?:))*)*" []-        ["aaaa"]-        [Just ["aaaa"]]--    , testRegex "^(a()*)*" []-        ["aaaa"]-        [Just ["aaaa", "a", ""]]--    , testRegex "^(a){1,}" []-        ["bcd",-         "abc",-         "aab",-         "aaa",-         "aaaaaaaa    "]-        [Nothing,-         Just ["a", "a"],-         Just ["aa", "a"],-         Just ["aaa", "a"],-         Just ["aaaaaaaa", "a"]]--    , testRegex "(?s)(.*X|^B)" []-        ["abcde\n1234Xyz",-         "BarFoo ",-         "*** Failers ",-         "abcde\nBar  "]-        [Just ["abcde\n1234X", "abcde\n1234X"],-         Just ["B", "B"],-         Nothing,-         Nothing]--    , testRegex "(?s:.*X|^B)" []-        ["abcde\n1234Xyz",-         "BarFoo ",-         "*** Failers ",-         "abcde\nBar  "]-        [Just ["abcde\n1234X"],-         Just ["B"],-         Nothing,-         Nothing]--    , testRegex "\\w{3}(?<!bar)foo" []-        ["catfood",-         "*** Failers",-         "foo",-         "barfoo",-         "towbarfoo"]-        [Just ["catfoo"],-         Nothing,-         Nothing,-         Nothing,-         Nothing]--    , testRegex "(?>(\\.\\d\\d[1-9]?))\\d+" []-        ["1.230003938",-         "1.875000282",-         "1.235 "]-        [Just [".230003938", ".23"],-         Just [".875000282", ".875"],-         Nothing]--    , testRegex "^((?>\\w+)|(?>\\s+))*$" []-        ["now is the time for all good men to come to the aid of the party",-         "this is not a line with only words and spaces!"]-        [Just ["now is the time for all good men to come to the aid of the party", "party"],-         Nothing]--    , testRegex "((?>\\d+))(\\w)" []-        ["12345a",-         "12345+ "]-        [Just ["12345a", "12345", "a"],-         Nothing]--    , testRegex "(?>a+)b" []-        ["aaab"]-        [Just ["aaab"]]--    , testRegex "((?>a+)b)" []-        ["aaab"]-        [Just ["aaab", "aaab"]]--    , testRegex "(?>(a+))b" []-        ["aaab"]-        [Just ["aaab", "aaa"]]-    , testRegex "(?>b)+" []-        ["aaabbbccc"]-        [Just ["bbb"]]--    , testRegex "(?>a+|b+|c+)*c" []-        ["aaabbbbccccd"]-        [Just ["aaabbbbc"]]--    , testRegex "(?:(a)|b)(?(1)A|B)" []-        ["aA",-         "bB",-         "aB",-         "bA    "]-        [Just ["aA", "a"],-         Just ["bB"],-         Nothing,-         Nothing]--    , testRegex "^(a)?(?(1)a|b)+$" []-        ["aa",-         "b",---       "bb  ", -- ?-         "ab   "]-        [Just ["aa", "a"],-         Just ["b"],---       Just ["bb"],-         Nothing]--    , testRegex "^(?(?=abc)\\w{3}:|\\d\\d)$" []-        ["abc:",-         "12",-         "123",-         "xyz    "]-        [Just ["abc:"],-         Just ["12"],-         Nothing,-         Nothing]--    , testRegex "(?(?<!foo)cat|bar)" []-        ["foobar",-         "cat",-         "fcat",-         "focat   ",-         "foocat  "]-        [Just ["bar"],-         Just ["cat"],-         Just ["cat"],-         Just ["cat"],-         Nothing]--    , testRegex "^(?(2)a|(1)(2))+$" []-        ["12",-         "12a",-         "12aa",-         "*** Failers",-         "1234    "]-        [Just ["12", "1", "2"],-         Just ["12a", "1", "2"],-         Just ["12aa", "1", "2"],-         Nothing,-         Nothing]--    , testRegex "(?<=foo\\n)^bar" [multiline]-        ["foo\nbar",-         "*** Failers",-         "bar",-         "baz\nbar   "]-        [Just ["bar"],-         Nothing,-         Nothing,-         Nothing]--    , testRegex "(?<=(?<!foo)bar)baz" []-        ["barbaz",-         "barbarbaz ",-         "koobarbaz ",-         "*** Failers",-         "baz",-         "foobarbaz "]-        [Just ["baz"],-         Just ["baz"],-         Just ["baz"],-         Nothing,-         Nothing,-         Nothing]--{--    , testRegex "^(a\\1?){4}$" []-        ["a",-         "aa",-         "aaa",-         "aaaa",-         "aaaaa",-         "aaaaaaa",-         "aaaaaaaa",-         "aaaaaaaaa",-         "aaaaaaaaaa",-         "aaaaaaaaaaa",-         "aaaaaaaaaaaa",-         "aaaaaaaaaaaaa",-         "aaaaaaaaaaaaaa",-         "aaaaaaaaaaaaaaa",-         "aaaaaaaaaaaaaaaa               "]-        [Nothing,-         Nothing,-         Nothing,-         Just ["aaaa", "a"],-         Just ["aaaaa", "a"],-         Just ["aaaaaaa", "a"],-         Nothing,-         Nothing,-         Just ["aaaaaaaaaa", "aaaa"],-         Nothing,-         Nothing,-         Nothing,-         Nothing,-         Nothing,-         Nothing]--}--    , testRegex "abc" []-        ["abc",-         "xabcy",-         "ababc",-         "*** Failers",-         "xbc",-         "axc",-         "abx"]-        [Just ["abc"],-         Just ["abc"],-         Just ["abc"],-         Nothing,-         Nothing,-         Nothing,-         Nothing]--    , testRegex "ab*c" []-        ["abc"]-        [Just ["abc"]]-    , testRegex "ab*bc" []-        ["abc",-         "abbc",-         "abbbbc"]-        [Just ["abc"],-         Just ["abbc"],-         Just ["abbbbc"]]--    , testRegex ".{1}" []-        ["abbbbc"]-        [Just ["a"]]--    , testRegex ".{3,4}" []-        ["abbbbc"]-        [Just ["abbb"]]--    , testRegex "ab{0,}bc" []-        ["abbbbc"]-        [Just ["abbbbc"]]--    , testRegex "ab+bc" []-        ["abbc",-         "abc",-         "abq"]-        [Just ["abbc"],-         Nothing,-         Nothing]--    , testRegex "ab{1,}bc" []-        []-        []--    , testRegex "ab+bc" []-        ["abbbbc"]-        [Just ["abbbbc"]]--    , testRegex "ab{1,}bc" []-        ["abbbbc"]-        [Just ["abbbbc"]]--    , testRegex "ab{1,3}bc" []-        ["abbbbc"]-        [Just ["abbbbc"]]--    , testRegex "ab{3,4}bc" []-        ["abbbbc"]-        [Just ["abbbbc"]]--    , testRegex "ab{4,5}bc" []-        ["*** Failers",-         "abq",-         "abbbbc"]-        [Nothing,-         Nothing,-         Nothing]--    , testRegex "ab?bc" []-        ["abbc",-         "abc"]-        [Just ["abbc"],-         Just ["abc"]]--    , testRegex "ab{0,1}bc" []-        ["abc"]-        [Just ["abc"]]--    , testRegex "ab?bc" []-        []-        []--    , testRegex "ab?c" []-        ["abc"]-        [Just ["abc"]]--    , testRegex "ab{0,1}c" []-        ["abc"]-        [Just ["abc"]]--    , testRegex "^abc$" []-        ["abc",-         "abbbbc",-         "abcc"]-        [Just ["abc"],-         Nothing,-         Nothing]--    , testRegex "^abc" []-        ["abcc"]-        [Just ["abc"]]--    , testRegex "^abc$" []-        []-        []--    , testRegex "abc$" []-        ["aabc",-         "*** Failers",-         "aabc",-         "aabcd"]-        [Just ["abc"],-         Nothing,-         Just ["abc"],-         Nothing]--    , testRegex "^" []-        ["abc"]-        [Just [""]]-    ,--    testRegex "$" []-        ["abc"]-        [Just [""]]-    ,--    testRegex "a.c" []-        ["abc",-         "axc"]-        [Just ["abc"],-         Just ["axc"]]-    ,--    testRegex "a.*c" []-        ["axyzc"]-        [Just ["axyzc"]]-    ,--    testRegex "a[bc]d" []-        ["abd",-         "*** Failers",-         "axyzd",-         "abc"]-        [Just ["abd"],-         Nothing,-         Nothing,-         Nothing]-    ,--    testRegex "a[b-d]e" []-        ["ace"]-        [Just ["ace"]]-    ,--    testRegex "a[b-d]" []-        ["aac"]-        [Just ["ac"]]-    ,--    testRegex "a[-b]" []-        ["a-"]-        [Just ["a-"]]-    ,--    testRegex "a[b-]" []-        ["a-"]-        [Just ["a-"]]-    ,---    testRegex "a]" []-        ["a]"]-        [Just ["a]"]]-    ,---    testRegex "a[]]b" []-        ["a]b"]-        [Just ["a]b"]]-    ,--    testRegex "a[^bc]d" []-        ["aed",-         "*** Failers",-         "abd",-         "abd"]-        [Just ["aed"],-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "a[^-b]c" []-        ["adc"]-        [Just ["adc"]]-    ,--    testRegex "a[^]b]c" []-        ["adc",-         "*** Failers",-         "a-c",-         "a]c"]-        [Just ["adc"],-         Nothing,-         Just ["a-c"],-         Nothing]-    ,---    testRegex "\\ba\\b" []-        ["a-",-         "-a",-         "-a-"]-        [Just ["a"],-         Just ["a"],-         Just ["a"]]-    ,---    testRegex "\\by\\b" []-        ["*** Failers",-         "xy",-         "yz",-         "xyz"]-        [Nothing,-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "\\Ba\\B" []-        ["*** Failers",-         "a-",-         "-a",-         "-a-"]-        [Just ["a"],-         Nothing,-         Nothing,-         Nothing]-    ,--    testRegex "\\By\\b" []-        ["xy"]-        [Just ["y"]]-    ,---    testRegex "\\by\\B" []-        ["yz"]-        [Just ["y"]]-    ,---    testRegex "\\By\\B" []-        ["xyz"]-        [Just ["y"]]-    ,--    testRegex "\\w" []-        ["a"]-        [Just ["a"]]-    ,---    testRegex "\\W" []-        ["-",-         "*** Failers",-         "-",-         "a"]-        [Just ["-"],-         Just ["*"],-         Just ["-"],-         Nothing]-    ,---    testRegex "a\\sb" []-        ["a b"]-        [Just ["a b"]]-    ,---    testRegex "a\\Sb" []-        ["a-b",-         "*** Failers",-         "a-b",-         "a b"]-        [Just ["a-b"],-         Nothing,-         Just ["a-b"],-         Nothing]-    ,---    testRegex "\\d" []-        ["1"]-        [Just ["1"]]-    ,---    testRegex "\\D" []-        ["-",-         "*** Failers",-         "-",-         "1"]-        [Just ["-"],-         Just ["*"],-         Just ["-"],-         Nothing]-    ,---    testRegex "[\\w]" []-        ["a"]-        [Just ["a"]]-    ,---    testRegex "[\\W]" []-        ["-",-         "*** Failers",-         "-",-         "a"]-        [Just ["-"],-         Just ["*"],-         Just ["-"],-         Nothing]-    ,---    testRegex "a[\\s]b" []-        ["a b"]-        [Just ["a b"]]-    ,---    testRegex "a[\\S]b" []-        ["a-b",-         "*** Failers",-         "a-b",-         "a b"]-        [Just ["a-b"],-         Nothing,-         Just ["a-b"],-         Nothing]-    ,--    testRegex "[\\d]" []-        ["1"]-        [Just ["1"]]-    ,---    testRegex "[\\D]" []-        ["-",-         "*** Failers",-         "-",-         "1"]-        [Just ["-"],-         Just ["*"],-         Just ["-"],-         Nothing]-    ,---    testRegex "ab|cd" []-        ["abc",-         "abcd"]-        [Just ["ab"],-         Just ["ab"]]-    ,----    testRegex "$b" []-        []-        []-    ,---    testRegex "a\\(b" []-        ["a(b"]-        [Just ["a(b"]]-    ,---    testRegex "a\\(*b" []-        ["ab",-         "a((b"]-        [Just ["ab"],-         Just ["a((b"]]-    ,---    testRegex "((a))" []-        ["abc"]-        [Just ["a", "a", "a"]]-    ,---    testRegex "(a)b(c)" []-        ["abc"]-        [Just ["abc", "a", "c"]]--    ,-    testRegex "a+b+c" []-        ["aabbabc"]-        [Just ["abc"]]-    ,---    testRegex "a{1,}b{1,}c" []-        ["aabbabc"]-        [Just ["abc"]]-    ,---    testRegex "a.+?c" []-        ["abcabc"]-        [Just ["abc"]]-    ,---    testRegex "(a+|b)*" []-        ["ab"]-        [Just ["ab", "b"]]-    ,---    testRegex "(a+|b){0,}" []-        ["ab"]-        [Just ["ab", "b"]]-    ,---    testRegex "(a+|b)+" []-        ["ab"]-        [Just ["ab","b"]]-    ,---    testRegex "(a+|b){1,}" []-        ["ab"]-        [Just ["ab", "b"]]-    ,---    testRegex "(a+|b)?" []-        ["ab"]-        [Just ["a", "a"]]-    ,---    testRegex "(a+|b){0,1}" []-        ["ab"]-        [Just ["a", "a"]]-    ,---    testRegex "[^ab]*" []-        ["cde"]-        [Just ["cde"]]--    ,--    testRegex "abc" []-        ["b"]-        [Nothing]-    ,---    testRegex "a*" []-        [""]-        [Just [""]]-    ,---    testRegex "([abc])*d" []-        ["abbbcd"]-        [Just ["abbbcd", "c"]]-    ,---    testRegex "([abc])*bcd" []-        ["abcd"]-        [Just ["abcd", "a"]]-    ,---    testRegex "a|b|c|d|e" []-        ["e"]-        [Just ["e"]]-    ,---    testRegex "(a|b|c|d|e)f" []-        ["ef"]-        [Just ["ef", "e"]]-    ,---    testRegex "abcd*efg" []-        ["abcdefg"]-        [Just ["abcdefg"]]-    ,---    testRegex "ab*" []-        ["xabyabbbz",-         "xayabbbz"]-        [Just ["ab"],-         Just ["a"]]-    ,---    testRegex "(ab|cd)e" []-        ["abcde"]-        [Just ["cde", "cd"]]-    ,---    testRegex "[abhgefdc]ij" []-        ["hij"]-        [Just ["hij"]]--    , testRegex "^(ab|cd)e" []-        []-        []-    ,--    testRegex "(abc|)ef" []-        ["abcdef"]-        [Just ["ef", ""]]-    ,---    testRegex "(a|b)c*d" []-        ["abcd"]-        [Just ["bcd", "b"]]-    ,---    testRegex "(ab|ab*)bc" []-        ["abc"]-        [Just ["abc", "a"]]-    ,---    testRegex "a([bc]*)c*" []-        ["abc"]-        [Just ["abc", "bc"]]-    ,---    testRegex "a([bc]*)(c*d)" []-        ["abcd"]-        [Just ["abcd", "bc", "d"]]-    ,---    testRegex "a([bc]+)(c*d)" []-        ["abcd"]-        [Just ["abcd", "bc", "d"]]-    ,---    testRegex "a([bc]*)(c+d)" []-        ["abcd"]-        [Just ["abcd", "b", "cd"]]-    ,---    testRegex "a[bcd]*dcdcde" []-        ["adcdcde"]-        [Just ["adcdcde"]]-    ,---    testRegex "a[bcd]+dcdcde" []-        ["*** Failers",-         "abcde",-         "adcdcde"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "(ab|a)b*c" []-        ["abc"]-        [Just ["abc", "ab"]]--    ,--    testRegex "((a)(b)c)(d)" []-        ["abcd"]-        [Just ["abcd", "abc", "a", "b", "d"]]-    ,---    testRegex "[a-zA-Z_][a-zA-Z0-9_]*" []-        ["alpha"]-        [Just ["alpha"]]-    ,---    testRegex "^a(bc+|b[eh])g|.h$" []-        ["abh"]-        [Just ["bh"]]-    ,---    testRegex "(bc+d$|ef*g.|h?i(j|k))" []-        ["effgz",-         "ij",-         "reffgz",-         "*** Failers",-         "effg",-         "bcdd"]-        [Just ["effgz", "effgz"],-         Just ["ij", "ij", "j"],-         Just ["effgz", "effgz"],-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "((((((((((a))))))))))" []-        ["a"]-        [Just ["a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a"]]-    ,---    testRegex "((((((((((a))))))))))\\10" []-        ["aa"]-        [Just ["aa", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a"]]-    ,---    testRegex "(((((((((a)))))))))" []-        ["a"]-        [Just ["a", "a", "a", "a", "a", "a", "a", "a", "a", "a"]]-    ,---    testRegex "multiple words of text" []-        ["*** Failers",-         "aa",-         "uh-uh"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "multiple words" []-        ["multiple words, yeah"]-        [Just ["multiple words"]]-    ,---    testRegex "(.*)c(.*)" []-        ["abcde"]-        [Just ["abcde", "ab", "de"]]-    ,--    testRegex "\\((.*), (.*)\\)" []-        ["(a, b)"]-        [Just ["(a, b)", "a", "b"]]-    ,---    testRegex "[k]" []-        []-        []-    ,---    testRegex "abcd" []-        ["abcd"]-        [Just ["abcd"]]-    ,---    testRegex "a(bc)d" []-        ["abcd"]-        [Just ["abcd", "bc"]]-    ,---    testRegex "a[-]?c" []-        ["ac"]-        [Just ["ac"]]-    ,---    testRegex "(abc)\\1" []-        ["abcabc"]-        [Just ["abcabc", "abc"]]-    ,---    testRegex "([a-c]*)\\1" []-        ["abcabc"]-        [Just ["abcabc", "abc"]]-    ,---    testRegex "(a)|\\1" []-        ["a",-         "*** Failers",-         "ab",-         "x"]-        [Just ["a", "a"],-         Just ["a", "a"],-         Just ["a", "a"],-         Nothing]-    ,---    testRegex "(([a-c])b*?\\2)*" []-        ["ababbbcbc"]-        [Just ["ababb", "bb", "b"]]-    ,---    testRegex "(([a-c])b*?\\2){3}" []-        ["ababbbcbc"]-        [Just ["ababbbcbc", "cbc", "c"]]-    ,-    testRegex "((\\3|b)\\2(a)x)+" []-        ["aaaxabaxbaaxbbax"]-        [Just ["bbax", "bbax", "b", "a"]]-    ,---    testRegex "((\\3|b)\\2(a)){2,}" []-        ["bbaababbabaaaaabbaaaabba"]-        [Just ["bbaaaabba", "bba", "b", "a"]]-    ,---    testRegex "abc" [caseless]-        ["ABC",-         "XABCY",-         "ABABC",-         "*** Failers",-         "aaxabxbaxbbx",-         "XBC",-         "AXC",-         "ABX"]-        [Just ["ABC"],-         Just ["ABC"],-         Just ["ABC"],-         Nothing,-         Nothing,-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "ab*c" [caseless]-        ["ABC"]-        [Just ["ABC"]]-    ,---    testRegex "ab*bc" [caseless]-        ["ABC",-         "ABBC"]-        [Just ["ABC"],-         Just ["ABBC"]]-    ,---    testRegex "ab*?bc" [caseless]-        ["ABBBBC"]-        [Just ["ABBBBC"]]-    ,---    testRegex "ab{0,}?bc" [caseless]-        ["ABBBBC"]-        [Just ["ABBBBC"]]-    ,---    testRegex "ab+?bc" [caseless]-        ["ABBC"]-        [Just ["ABBC"]]-    ,---    testRegex "ab+bc" [caseless]-        ["*** Failers",-         "ABC",-         "ABQ"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "ab{1,}bc" [caseless]-        []-        []-    ,--    testRegex "ab+bc" [caseless]-        ["ABBBBC"]-        [Just ["ABBBBC"]]-    ,---    testRegex "ab{1,}?bc" [caseless]-        ["ABBBBC"]-        [Just ["ABBBBC"]]-    ,---    testRegex "ab{1,3}?bc" [caseless]-        ["ABBBBC"]-        [Just ["ABBBBC"]]-    ,---    testRegex "ab{3,4}?bc" [caseless]-        ["ABBBBC"]-        [Just ["ABBBBC"]]-    ,---    testRegex "ab{4,5}?bc" [caseless]-        ["*** Failers",-         "ABQ",-         "ABBBBC"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "ab??bc" [caseless]-        ["ABBC",-         "ABC"]-        [Just ["ABBC"],-         Just ["ABC"]]-    ,---    testRegex "ab{0,1}?bc" [caseless]-        ["ABC"]-        [Just ["ABC"]]-    ,---    testRegex "ab??bc" [caseless]-        []-        []-    ,---    testRegex "ab??c" [caseless]-        ["ABC"]-        [Just ["ABC"]]-    ,--    testRegex "ab{0,1}?c" [caseless]-        ["ABC"]-        [Just ["ABC"]]-    ,-    testRegex "^abc$" [caseless]-        ["ABC",-         "*** Failers",-         "ABBBBC",-         "ABCC"]-        [Just ["ABC"],-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "^abc" [caseless]-        ["ABCC"]-        [Just ["ABC"]]-    ,---    testRegex "^abc$" [caseless]-        []-        []-    ,---    testRegex "abc$" [caseless]-        ["AABC"]-        [Just ["ABC"]]-    ,---    testRegex "^" [caseless]-        ["ABC"]-        [Just [""]]-    ,---    testRegex "$" [caseless]-        ["ABC"]-        [Just [""]]-    ,---    testRegex "a.c" [caseless]-        ["ABC",-         "AXC"]-        [Just ["ABC"],-         Just ["AXC"]]-    ,---    testRegex "a.*?c" [caseless]-        ["AXYZC"]-        [Just ["AXYZC"]]-    ,---    testRegex "a.*c" [caseless]-        ["*** Failers",-         "AABC",-         "AXYZD"]-        [Nothing,-         Just ["AABC"],-         Nothing]-    ,---    testRegex "a[bc]d" [caseless]-        ["ABD"]-        [Just ["ABD"]]-    ,--    testRegex "a[b-d]e" [caseless]-        ["ACE",-         "ABC",-         "ABD"]-        [Just ["ACE"],-         Nothing,-         Nothing]-    ,---    testRegex "a[b-d]" [caseless]-        ["AAC"]-        [Just ["AC"]]-    ,---    testRegex "a[-b]" [caseless]-        ["A-"]-        [Just ["A-"]]-    ,---    testRegex "a[b-]" [caseless]-        ["A-"]-        [Just ["A-"]]-    ,---    testRegex "a]" [caseless]-        ["A]"]-        [Just ["A]"]]-    ,---    testRegex "a[]]b" [caseless]-        ["A]B"]-        [Just ["A]B"]]-    ,---    testRegex "a[^bc]d" [caseless]-        ["AED"]-        [Just ["AED"]]-    ,---    testRegex "a[^-b]c" [caseless]-        ["ADC",-         "ABD",-         "A-C"]-        [Just ["ADC"],-         Nothing,-         Nothing]-    ,---    testRegex "a[^]b]c" [caseless]-        ["ADC"]-        [Just ["ADC"]]-    ,---    testRegex "ab|cd" [caseless]-        ["ABC",-         "ABCD"]-        [Just ["AB"],-         Just ["AB"]]--    ,-    testRegex "()ef" [caseless]-        ["DEF"]-        [Just ["EF", ""]]-    ,---    testRegex "$b" [caseless]-        ["A]C",-         "B"]-        [Nothing,-         Nothing]-    ,---    testRegex "a\\(b" [caseless]-        ["A(B"]-        [Just ["A(B"]]-    ,---    testRegex "a\\(*b" [caseless]-        ["AB",-         "A((B"]-        [Just ["AB"],-         Just ["A((B"]]-    ,----    testRegex "((a))" [caseless]-        ["ABC"]-        [Just ["A", "A", "A"]]-    ,---    testRegex "(a)b(c)" [caseless]-        ["ABC"]-        [Just ["ABC", "A", "C"]]-    ,---    testRegex "a+b+c" [caseless]-        ["AABBABC"]-        [Just ["ABC"]]-    ,---    testRegex "a{1,}b{1,}c" [caseless]-        ["AABBABC"]-        [Just ["ABC"]]-    ,---    testRegex "a.+?c" [caseless]-        ["ABCABC"]-        [Just ["ABC"]]-    ,--    testRegex "a.*?c" [caseless]-        ["ABCABC"]-        [Just ["ABC"]]-    ,---    testRegex "a.{0,5}?c" [caseless]-        ["ABCABC"]-        [Just ["ABC"]]-    ,---    testRegex "(a+|b)*" [caseless]-        ["AB"]-        [Just ["AB", "B"]]-    ,---    testRegex "(a+|b){0,}" [caseless]-        ["AB"]-        [Just ["AB", "B"]]-    ,---    testRegex "(a+|b)+" [caseless]-        ["AB"]-        [Just ["AB","B"]]-    ,---    testRegex "(a+|b){1,}" [caseless]-        ["AB"]-        [Just ["AB", "B"]]-    ,---    testRegex "(a+|b)?" [caseless]-        ["AB"]-        [Just ["A", "A"]]-    ,---    testRegex "(a+|b){0,1}" [caseless]-        ["AB"]-        [Just ["A", "A"]]-    ,---    testRegex "(a+|b){0,1}?" [caseless]-        ["AB"]-        [Just [""]]-    ,---    testRegex "[^ab]*" [caseless]-        ["CDE"]-        [Just ["CDE"]]-    ,--    testRegex "abc" [caseless]-        []-        []-    ,---    testRegex "a*" [caseless]-        [""]-        [Just [""]]-    ,---    testRegex "([abc])*d" [caseless]-        ["ABBBCD"]-        [Just ["ABBBCD", "C"]]-    ,---    testRegex "([abc])*bcd" [caseless]-        ["ABCD"]-        [Just ["ABCD","A"]]-    ,---    testRegex "a|b|c|d|e" [caseless]-        ["E"]-        [Just ["E"]]-    ,---    testRegex "(a|b|c|d|e)f" [caseless]-        ["EF"]-        [Just ["EF", "E"]]-    ,---    testRegex "abcd*efg" [caseless]-        ["ABCDEFG"]-        [Just ["ABCDEFG"]]-    ,---    testRegex "ab*" [caseless]-        ["XABYABBBZ",-         "XAYABBBZ"]-        [Just ["AB"],-         Just ["A"]]-    ,---    testRegex "(ab|cd)e" [caseless]-        ["ABCDE"]-        [Just ["CDE", "CD"]]-    ,---    testRegex "[abhgefdc]ij" [caseless]-        ["HIJ"]-        [Just ["HIJ"]]-    ,---    testRegex "^(ab|cd)e" [caseless]-        ["ABCDE"]-        [Nothing]-    ,---    testRegex "(abc|)ef" [caseless]-        ["ABCDEF"]-        [Just ["EF", ""]]-    ,---    testRegex "(a|b)c*d" [caseless]-        ["ABCD"]-        [Just ["BCD", "B"]]-    ,---    testRegex "(ab|ab*)bc" [caseless]-        ["ABC"]-        [Just ["ABC", "A"]]-    ,---    testRegex "a([bc]*)c*" [caseless]-        ["ABC"]-        [Just ["ABC", "BC"]]-    ,---    testRegex "a([bc]*)(c*d)" [caseless]-        ["ABCD"]-        [Just ["ABCD","BC","D"]]-    ,---    testRegex "a([bc]+)(c*d)" [caseless]-        ["ABCD"]-        [Just ["ABCD","BC","D"]]-    ,---    testRegex "a([bc]*)(c+d)" [caseless]-        ["ABCD"]-        [Just ["ABCD","B","CD"]]-    ,---    testRegex "a[bcd]*dcdcde" [caseless]-        ["ADCDCDE"]-        [Just ["ADCDCDE"]]-    ,--    testRegex "a[bcd]+dcdcde" [caseless]-        []-        []-    ,--    testRegex "(ab|a)b*c" [caseless]-        ["ABC"]-        [Just ["ABC", "AB"]]-    ,---    testRegex "((a)(b)c)(d)" [caseless]-        ["ABCD"]-        [Just ["ABCD", "ABC", "A", "B", "D"]]-    ,---    testRegex "[a-zA-Z_][a-zA-Z0-9_]*" [caseless]-        ["ALPHA"]-        [Just ["ALPHA"]]-    ,---    testRegex "^a(bc+|b[eh])g|.h$" [caseless]-        ["ABH"]-        [Just ["BH"]]-    ,---    testRegex "(bc+d$|ef*g.|h?i(j|k))" [caseless]-        ["EFFGZ",-         "IJ",-         "REFFGZ",-         "*** Failers",-         "ADCDCDE",-         "EFFG",-         "BCDD"]-        [Just ["EFFGZ", "EFFGZ"],-         Just ["IJ", "IJ", "J"],-         Just ["EFFGZ", "EFFGZ"],-         Nothing,-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "((((((((((a))))))))))" [caseless]-        ["A"]-        [Just ["A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"]]-    ,---    testRegex "((((((((((a))))))))))\\10" [caseless]-        ["AA"]-        [Just ["AA", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"]]-    ,---    testRegex "(((((((((a)))))))))" [caseless]-        ["A"]-        [Just ["A", "A", "A", "A", "A", "A", "A", "A", "A", "A"]]-    ,---    testRegex "(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))" [caseless]-        ["A"]-        [Just ["A", "A"]]-    ,---    testRegex "(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))" [caseless]-        ["C"]-        [Just ["C", "C"]]-    ,---    testRegex "multiple words of text" [caseless]-        ["AA",-         "UH-UH"]-        [Nothing,-         Nothing]-    ,---    testRegex "multiple words" [caseless]-        ["MULTIPLE WORDS, YEAH"]-        [Just ["MULTIPLE WORDS"]]-    ,---    testRegex "(.*)c(.*)" [caseless]-        ["ABCDE"]-        [Just ["ABCDE", "AB", "DE"]]-    ,---    testRegex "\\((.*), (.*)\\)" [caseless]-        ["(A, B)"]-        [Just ["(A, B)", "A", "B"]]-    ,---    testRegex "[k]" [caseless]-        []-        []-    ,---    testRegex "abcd" [caseless]-        ["ABCD"]-        [Just ["ABCD"]]-    ,---    testRegex "a(bc)d" [caseless]-        ["ABCD"]-        [Just ["ABCD", "BC"]]-    ,---    testRegex "a[-]?c" [caseless]-        ["AC"]-        [Just ["AC"]]-    ,---    testRegex "(abc)\\1" [caseless]-        ["ABCABC"]-        [Just ["ABCABC", "ABC"]]-    ,---    testRegex "([a-c]*)\\1" [caseless]-        ["ABCABC"]-        [Just ["ABCABC", "ABC"]]-    ,--    testRegex "a(?!b)." []-        ["abad"]-        [Just ["ad"]]-    ,---    testRegex "a(?=d)." []-        ["abad"]-        [Just ["ad"]]-    ,---    testRegex "a(?=c|d)." []-        ["abad"]-        [Just ["ad"]]-    ,---    testRegex "a(?:b|c|d)(.)" []-        ["ace"]-        [Just ["ace", "e"]]-    ,---    testRegex "a(?:b|c|d)*(.)" []-        ["ace"]-        [Just ["ace", "e"]]-    ,---    testRegex "a(?:b|c|d)+?(.)" []-        ["ace",-         "acdbcdbe"]-        [Just ["ace", "e"],-         Just ["acd", "d"]]-    ,---    testRegex "a(?:b|c|d)+(.)" []-        ["acdbcdbe"]-        [Just ["acdbcdbe", "e"]]-    ,---    testRegex "a(?:b|c|d){2}(.)" []-        ["acdbcdbe"]-        [Just ["acdb", "b"]]-    ,---    testRegex "a(?:b|c|d){4,5}(.)" []-        ["acdbcdbe"]-        [Just ["acdbcdb", "b"]]-    ,---    testRegex "a(?:b|c|d){4,5}?(.)" []-        ["acdbcdbe"]-        [Just ["acdbcd", "d"]]-    ,---    testRegex "((foo)|(bar))*" []-        ["foobar"]-        [Just ["foobar", "bar", "foo", "bar"]]-    ,---    testRegex "a(?:b|c|d){6,7}(.)" []-        ["acdbcdbe"]-        [Just ["acdbcdbe", "e"]]-    ,---    testRegex "a(?:b|c|d){6,7}?(.)" []-        ["acdbcdbe"]-        [Just ["acdbcdbe", "e"]]-    ,---    testRegex "a(?:b|c|d){5,6}(.)" []-        ["acdbcdbe"]-        [Just ["acdbcdbe", "e"]]-    ,---    testRegex "a(?:b|c|d){5,6}?(.)" []-        ["acdbcdbe"]-        [Just ["acdbcdb", "b"]]-    ,---    testRegex "a(?:b|c|d){5,7}(.)" []-        ["acdbcdbe"]-        [Just ["acdbcdbe", "e"]]-    ,---    testRegex "a(?:b|c|d){5,7}?(.)" []-        ["acdbcdbe"]-        [Just ["acdbcdb", "b"]]-    ,---    testRegex "a(?:b|(c|e){1,2}?|d)+?(.)" []-        ["ace"]-        [Just ["ace", "c", "e"]]-    ,---    testRegex "^(.+)?B" []-        ["AB"]-        [Just ["AB", "A"]]-    ,---    testRegex "^([^a-z])|(\\^)$" []-        ["."]-        [Just [".", "."]]-    ,--    testRegex "^[<>]&" []-        ["<&OUT"]-        [Just ["<&"]]-    ,---    testRegex "^(a\\1?){4}$" []-        ["aaaaaaaaaa",-         "*** Failers",-         "AB",-         "aaaaaaaaa",-         "aaaaaaaaaaa"]-        [Just ["aaaaaaaaaa", "aaaa"],-         Nothing,-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "^(a(?(1)\\1)){4}$" []-        ["aaaaaaaaaa",-         "*** Failers",-         "aaaaaaaaa",-         "aaaaaaaaaaa"]-        [Just ["aaaaaaaaaa", "aaaa"],-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "(?:(f)(o)(o)|(b)(a)(r))*" []-        ["foobar"]-        [Just ["foobar", "f", "o", "o", "b", "a", "r"]]-    ,---    testRegex "(?<=a)b" []-        ["ab",-         "*** Failers",-         "cb",-         "b"]-        [Just ["b"],-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "(?<!c)b" []-        ["ab",-         "b",-         "b"]-        [Just ["b"],-         Just ["b"],-         Just ["b"]]-    ,---    testRegex "(?:..)*a" []-        ["aba"]-        [Just ["aba"]]-    ,---    testRegex "(?:..)*?a" []-        ["aba"]-        [Just ["a"]]-    ,---    testRegex "^(?:b|a(?=(.)))*\\1" []-        ["abc"]-        [Just ["ab", "b"]]-    ,---    testRegex "^(){3,5}" []-        ["abc"]-        [Just ["", ""]]-    ,---    testRegex "^(a+)*ax" []-        ["aax"]-        [Just ["aax", "a"]]-    ,---    testRegex "^((a|b)+)*ax" []-        ["aax"]-        [Just ["aax", "a", "a"]]-    ,---    testRegex "^((a|bc)+)*ax" []-        ["aax"]-        [Just ["aax", "a", "a"]]-    ,---    testRegex "(a|x)*ab" []-        ["cab"]-        [Just ["ab"]]-    ,---    testRegex "(a)*ab" []-        ["cab"]-        [Just ["ab"]]-    ,---    testRegex "(?:(?i)a)b" []-        ["ab"]-        [Just ["ab"]]-    ,---    testRegex "((?i)a)b" []-        ["ab"]-        [Just ["ab", "a"]]-    ,---    testRegex "(?:(?i)a)b" []-        ["Ab"]-        [Just ["Ab"]]-    ,---    testRegex "((?i)a)b" []-        ["Ab"]-        [Just ["Ab", "A"]]-    ,---    testRegex "(?:(?i)a)b" []-        ["*** Failers",-         "cb",-         "aB"]-        [Nothing,-         Nothing,-         Nothing]-    ,-    testRegex "((?i)a)b" []-        []-        []-    ,---    testRegex "(?i:a)b" []-        ["ab"]-        [Just ["ab"]]-    ,---    testRegex "((?i:a))b" []-        ["ab"]-        [Just ["ab", "a"]]-    ,---    testRegex "(?i:a)b" []-        ["Ab"]-        [Just ["Ab"]]-    ,---    testRegex "((?i:a))b" []-        ["Ab"]-        [Just ["Ab", "A"]]-    ,---    testRegex "(?i:a)b" []-        ["*** Failers",-         "aB",-         "aB"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "((?i:a))b" []-        []-        []-    ,---    testRegex "(?:(?-i)a)b" [caseless]-        ["ab"]-        [Just ["ab"]]-    ,---    testRegex "((?-i)a)b" [caseless]-        ["ab"]-        [Just ["ab", "a"]]-    ,---    testRegex "(?:(?-i)a)b" [caseless]-        ["aB"]-        [Just ["aB"]]-    ,---    testRegex "((?-i)a)b" [caseless]-        ["aB"]-        [Just ["aB", "a"]]-    ,---    testRegex "(?:(?-i)a)b" [caseless]-        ["*** Failers",-         "aB",-         "Ab"]-        [Nothing,-         Just ["aB"],-         Nothing]-    ,---    testRegex "((?-i)a)b" [caseless]-        []-        []-    ,---    testRegex "(?:(?-i)a)b" [caseless]-        ["aB"]-        [Just ["aB"]]-    ,---    testRegex "((?-i)a)b" [caseless]-        ["aB"]-        [Just ["aB", "a"]]-    ,---    testRegex "(?:(?-i)a)b" [caseless]-        ["*** Failers",-         "Ab",-         "AB"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "((?-i)a)b" [caseless]-        []-        []-    ,---    testRegex "(?-i:a)b" [caseless]-        ["ab"]-        [Just ["ab"]]-    ,---    testRegex "((?-i:a))b" [caseless]-        ["ab"]-        [Just ["ab", "a"]]-    ,---    testRegex "(?-i:a)b" [caseless]-        ["aB"]-        [Just ["aB"]]-    ,---    testRegex "((?-i:a))b" [caseless]-        ["aB"]-        [Just ["aB", "a"]]-    ,---    testRegex "(?-i:a)b" [caseless]-        ["*** Failers",-         "AB",-         "Ab"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "((?-i:a))b" [caseless]-        []-        []-    ,---    testRegex "(?-i:a)b" [caseless]-        ["aB"]-        [Just ["aB"]]-    ,---    testRegex "((?-i:a))b" [caseless]-        ["aB"]-        [Just ["aB", "a"]]-    ,---    testRegex "(?-i:a)b" [caseless]-        ["*** Failers",-         "Ab",-         "AB"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "((?-i:a))b" [caseless]-        []-        []-    ,---    testRegex "((?-i:a.))b" [caseless]-        ["*** Failers",-         "AB",-         "a\nB"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "((?s-i:a.))b" [caseless]-        ["a\nB"]-        [Just ["a\nB", "a\n"]]-    ,---    testRegex "(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))" []-        ["cabbbb"]-        [Just ["cabbbb"]]-    ,--    testRegex "(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))" []-        ["caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]-        [Just ["caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]]-    ,---    testRegex "(ab)\\d\\1" [caseless]-        ["Ab4ab",-         "ab4Ab"]-        [Just ["Ab4ab", "Ab"],-         Just ["ab4Ab", "ab"]]-    ,---    testRegex "foo\\w*\\d{4}baz" []-        ["foobar1234baz"]-        [Just ["foobar1234baz"]]-    ,---    testRegex "x(~~)*(?:(?:F)?)?" []-        ["x~~"]-        [Just ["x~~", "~~"]]-    ,---    testRegex "^a(?#xxx){3}c" []-        ["aaac"]-        [Just ["aaac"]]-    ,---    testRegex "^a (?#xxx) (?#yyy) {3}c" [extended]-        ["aaac"]-        [Just ["aaac"]]-    ,---    testRegex "(?<![cd])b" []-        ["*** Failers",-         "B\nB",-         "dbcb"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "(?<![cd])[ab]" []-        ["dbaacb"]-        [Just ["a"]]-    ,---    testRegex "(?<!(c|d))b" []-        []-        []-    ,---    testRegex "(?<!(c|d))[ab]" []-        ["dbaacb"]-        [Just ["a"]]-    ,---    testRegex "(?<!cd)[ab]" []-        ["cdaccb"]-        [Just ["b"]]-    ,--{--    testRegex "^(?:a?b?)*$" []-        ["a",-         "ab",-         "aaa   ",-         "*** Failers",-         "dbcb",-         "a--",-         "aa-- "]-        [Just ["a"],-         Just ["ab"],-         Just ["aaa"],-         Nothing,-         Nothing,-         Nothing,-         Nothing]-    ,-    -}---    testRegex "((?s)^a(.))((?m)^b$)" []-        ["a\nb\nc\n"]-        [Just ["a\nb", "a\n", "\n", "b"]]-    ,---    testRegex "((?m)^b$)" []-        ["a\nb\nc\n"]-        [Just ["b", "b"]]-    ,---    testRegex "(?m)^b" []-        ["a\nb\n"]-        [Just ["b"]]-    ,---    testRegex "(?m)^(b)" []-        ["a\nb\n"]-        [Just ["b", "b"]]-    ,---    testRegex "((?m)^b)" []-        ["a\nb\n"]-        [Just ["b", "b"]]-    ,---    testRegex "\\n((?m)^b)" []-        ["a\nb\n"]-        [Just ["\nb", "b"]]-    ,---    testRegex "((?s).)c(?!.)" []-        ["a\nb\nc\n",-         "a\nb\nc\n"]-        [Just ["\nc", "\n"],-         Just ["\nc", "\n"]]-    ,---    testRegex "((?s)b.)c(?!.)" []-        ["a\nb\nc\n",-         "a\nb\nc\n"]-        [Just ["b\nc", "b\n"],-         Just ["b\nc", "b\n"]]-    ,---    testRegex "^b" []-        []-        []-    ,---    testRegex "()^b" []-        ["*** Failers",-         "a\nb\nc\n",-         "a\nb\nc\n"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "((?m)^b)" []-        ["a\nb\nc\n"]-        [Just ["b", "b"]]-    ,--{--    testRegex "(?(1)a|b)" []-        []-        []-    ,---    testRegex "(?(1)b|a)" []-        ["a"]-        [Just ["a"]]-    ,---}--    testRegex "(x)?(?(1)a|b)" []-        ["*** Failers",-         "a",-         "a"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "(x)?(?(1)b|a)" []-        ["a"]-        [Just ["a"]]-    ,---    testRegex "()?(?(1)b|a)" []-        ["a"]-        [Just ["a"]]-    ,---    testRegex "()(?(1)b|a)" []-        []-        []-    ,---    testRegex "()?(?(1)a|b)" []-        ["a"]-        [Just ["a", ""]]-    ,---    testRegex "^(\\()?blah(?(1)(\\)))$" []-        ["(blah)",-         "blah",-         "a",-         "blah)",-         "(blah"]-        [Just ["(blah)", "(", ")"],-         Just ["blah"],-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "^(\\(+)?blah(?(1)(\\)))$" []-        ["(blah)",-         "blah",-         "*** Failers",-         "blah)",-         "(blah"]-        [Just ["(blah)", "(", ")"], -         Just ["blah"],-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "(?(?!a)a|b)" []-        []-        []-    ,---    testRegex "(?(?!a)b|a)" []-        ["a"]-        [Just ["a"]]-    ,---    testRegex "(?(?=a)b|a)" []-        ["*** Failers",-         "a",-         "a"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "(?(?=a)a|b)" []-        ["a"]-        [Just ["a"]]-    ,---    testRegex "(?=(a+?))(\\1ab)" []-        ["aaab"]-        [Just ["aab", "a", "aab"]]-    ,---    testRegex "^(?=(a+?))\\1ab" []-        []-        []-    ,---    testRegex "(\\w+:)+" []-        ["one:"]-        [Just ["one:", "one:"]]-    ,---    testRegex "$(?<=^(a))" []-        ["a"]-        [Just ["", "a"]]-    ,---    testRegex "(?=(a+?))(\\1ab)" []-        ["aaab"]-        [Just ["aab", "a", "aab"]]-    ,---    testRegex "^(?=(a+?))\\1ab" []-        ["*** Failers",-         "aaab",-         "aaab"]-        [Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "([\\w:]+::)?(\\w+)$" []-        ["abcd",-         "xy:z:::abcd"]-        [Just ["abcd", "", "abcd"],-         Just ["xy:z:::abcd", "xy:z:::", "abcd"]]-    ,---    testRegex "^[^bcd]*(c+)" []-        ["aexycd"]-        [Just ["aexyc", "c"]]-    ,---    testRegex "(a*)b+" []-        ["caab"]-        [Just ["aab", "aa"]]-    ,---    testRegex "([\\w:]+::)?(\\w+)$" []-        ["abcd",-         "xy:z:::abcd",-         "*** Failers",-         "abcd:",-         "abcd:"]-        [Just ["abcd", "", "abcd"],-         Just ["xy:z:::abcd", "xy:z:::", "abcd"],-         Just ["Failers", "", "Failers"],-         Nothing,-         Nothing]-    ,---    testRegex "^[^bcd]*(c+)" []-        ["aexycd"]-        [Just ["aexyc", "c"]]-    ,---    testRegex "(>a+)ab" []-        []-        []-    ,---    testRegex "(?>a+)b" []-        ["aaab"]-        [Just ["aaab"]]-    ,---    testRegex "([[:]+)" []-        ["a:[b]:"]-        [Just [":[", ":["]]--    ,-    testRegex "([[=]+)" []-        ["a=[b]="]-        [Just ["=[", "=["]]-    ,---    testRegex "([[.]+)" []-        ["a.[b]."]-        [Just [".[", ".["]]-    ,---    testRegex "((?>a+)b)" []-        ["aaab"]-        [Just ["aaab", "aaab"]]-    ,---    testRegex "(?>(a+))b" []-        ["aaab"]-        [Just ["aaab", "aaa"]]-    ,---    testRegex "((?>[^()]+)|\\([^()]*\\))+" []-        ["((abc(ade)ufh()()x"]-        [Just ["abc(ade)ufh()()x", "x"]]-    ,---    testRegex "a\\Z" []-        ["aaab",-         "a\nb\n"]-        [Nothing,-         Nothing]-    ,---    testRegex "b\\Z" []-        ["a\nb\n"]-        [Just ["b"]]-    ,---    testRegex "b\\z" []-        []-        []-    ,---    testRegex "b\\Z" []-        ["a\\nb"]-        [Just ["b"]]-    ,--    testRegex "(?>.*)(?<=(abcd|wxyz))" []-        ["alphabetabcd",-         "endingwxyz",-         "*** Failers",-         "a rather long string that doesn't end with one of them"]-        [Just ["alphabetabcd", "abcd"],-         Just ["endingwxyz", "wxyz"],-         Nothing,-         Nothing]-    ,---    testRegex "word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword" []-        ["word cat dog elephant mussel cow horse canary baboon snake shark otherword",-         "word cat dog elephant mussel cow horse canary baboon snake shark"-         ]-        [Just ["word cat dog elephant mussel cow horse canary baboon snake shark otherword"],-         Nothing]-    ,--    testRegex "((Z)+|A)*" []-        ["ZABCDEFG"]-        [Just ["ZA", "A", "Z"]]-    ,---    testRegex "(Z()|A)*" []-        ["ZABCDEFG"]-        [Just ["ZA", "A", ""]]-    ,---    testRegex "(Z(())|A)*" []-        ["ZABCDEFG"]-        [Just ["ZA", "A", "", ""]]-    ,--    testRegex "((?>Z)+|A)*" []-        ["ZABCDEFG"]-        [Just ["ZA", "A"]]-    ,---    testRegex "((?>)+|A)*" []-        ["ZABCDEFG"]-        [Just ["", ""]]-    ,----    testRegex "^[a-\\d]" []-        ["abcde",-         "-things",-         "0digit",-         "*** Failers",-         "bcdef    "]-        [Just ["a"],-         Just ["-"],-         Just ["0"],-         Nothing,-         Nothing]-    ,--    testRegex "\\Qabc\\$xyz\\E" []-        ["abc\\$xyz"]-        [Just ["abc\\$xyz"]]-    ,-    testRegex "\\Qabc\\E\\$\\Qxyz\\E" []-        ["abc$xyz"]-        [Just ["abc$xyz"]]-    ,-    testRegex "\\Gabc" []-        ["abc",-         "*** Failers",-         "xyzabc  "]-        [Just ["abc"],-         Nothing,-         Nothing]-    ,--    testRegex "a(?x: b c )d" []-        ["XabcdY",-         "*** Failers ",-         "Xa b c d Y "]-        [Just ["abcd"],-         Nothing,-         Nothing]-    ,---    testRegex "((?x)x y z | a b c)" []-        ["XabcY",-         "AxyzB "]-        [Just ["abc", "abc"],-         Just ["xyz", "xyz"]]-    ,---    testRegex "(?i)AB(?-i)C" []-        ["XabCY",-         "*** Failers",-         "XabcY  "]-        [Just ["abC"],-         Nothing,-         Nothing]-    ,---    testRegex "((?i)AB(?-i)C|D)E" []-        ["abCE",-         "DE",-         "*** Failers",-         "abcE",-         "abCe  ",-         "dE",-         "De    "]-        [Just ["abCE", "abC"],-         Just ["DE", "D"],-         Nothing,-         Nothing,-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "(.*)\\d+\\1" []-        ["abc123abc",-         "abc123bc "]-        [Just ["abc123abc", "abc"],-         Just ["bc123bc", "bc"]]-    ,--    testRegex "[z\\Qa-d]\\E]" []-        ["z",-         "a",-         "-",-         "d",-         "] ",-         "*** Failers",-         "b     "]-        [Just ["z"],-         Just ["a"],-         Just ["-"],-         Just ["d"],-         Just ["]"],-         Just ["a"],-         Nothing]--    , testRegex "(?<=Z)X." []-        ["\\x84XAZXB"]-        [Just ["XB"]]-    ,--    testRegex "ab cd (?x) de fg" []-        ["ab cd defg"]-        [Just ["ab cd defg"]]-    ,---    testRegex "ab cd(?x) de fg" []-        ["ab cddefg",-         "** Failers ",-         "abcddefg"]-        [Just ["ab cddefg"],-         Nothing,-         Nothing]-    ,---    testRegex "(?<![^f]oo)(bar)" []-        ["foobarX ",-         "** Failers ",-         "boobarX"]-        [Just ["bar", "bar"],-         Nothing,-         Nothing]-    ,---    testRegex "(?<![^f])X" []-        ["offX",-         "** Failers",-         "onyX  "]-        [Just ["X"],-         Nothing,-         Nothing]-    ,---    testRegex "(?<=[^f])X" []-        ["onyX",-         "** Failers",-         "offX "]-        [Just ["X"],-         Nothing,-         Nothing]-    ,----    testRegex "(?:(?(1)a|b)(X))+" []-        ["bXaX"]-        [Just ["bXaX", "X"]]-    ,--    testRegex "(?:(?(1)\\1a|b)(X|Y))+" []-        ["bXXaYYaY",-         "bXYaXXaX  "]-        [Just ["bXXaYYaY", "Y"],-         Just ["bX", "X"]]-    ,---    testRegex "()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+" []-        ["bXXaYYaY"]-        [Just ["bX", "", "", "", "", "", "", "", "", "", "X"]]-    ,---    testRegex "[[,abc,]+]" []-        ["abc]",-         "a,b]",-         "[a,b,c]  "]-        [Just ["abc]"],-         Just ["a,b]"],-         Just ["[a,b,c]"]]-    ,-----    testRegex "a*b*\\w" []-        ["aaabbbb",-         "aaaa",-         "a"]-        [Just ["aaabbbb"],-         Just ["aaaa"],-         Just ["a"]]-    ,---    testRegex "a*b?\\w" []-        ["aaabbbb",-         "aaaa",-         "a"]-        [Just ["aaabb"],-         Just ["aaaa"],-         Just ["a"]]-    ,---    testRegex "a*b{0,4}\\w" []-        ["aaabbbb",-         "aaaa",-         "a"]-        [Just ["aaabbbb"],-         Just ["aaaa"],-         Just ["a"]]-    ,---    testRegex "(?=(\\w+))\\1:" []-        ["abcd:"]-        [Just ["abcd:", "abcd"]]-    ,---    testRegex "^(?=(\\w+))\\1:" []-        ["abcd:"]-        [Just ["abcd:", "abcd"]]-    ,----    testRegex "^[a\\E\\E-\\Ec]" []-        ["b",-         "** Failers",-         "-",-         "E    "]-        [Just ["b"],-         Nothing,-         Nothing,-         Nothing]-    ,---    testRegex "(a){0,3}(?(1)b|(c|))*D" []-        ["abbD",-         "ccccD",-         "D  "]-        [Just ["abbD", "a"],-         Just ["ccccD", "", ""],-         Just ["D", "", ""]]-    ,---    -- WARNING: at around this point, the file starts segfaulting ghci....-    testRegex "(a|)*\\d" []-        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",-         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]-        [Nothing,-         Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4", ""]]--    ,-    testRegex "(?>a|)*\\d" []-        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",-         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]-        [Nothing,-         Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]--    ,--    testRegex "(?=(\\w+))\\1:" []-        ["abcd:"]-        [Just ["abcd:", "abcd"]]-    ,---    testRegex "^(?=(\\w+))\\1:" []-        ["abcd:"]-        [Just ["abcd:", "abcd"]]-    ,----    testRegex "^[a\\E\\E-\\Ec]" []-        ["b",-         "** Failers",-         "-",-         "E    "]-        [Just ["b"],-         Nothing,-         Nothing,-         Nothing]-    ,--------    testRegex "(a){0,3}(?(1)b|(c|))*D" []-        ["abbD",-         "ccccD",-         "D  "]-        [Just ["abbD", "a"],-         Just ["ccccD", "", ""],-         Just ["D", "", ""]]-    ,---    testRegex "(a|)*\\d" []-        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",-         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]-        [Nothing,-         Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4", ""]]-    ,---    testRegex "(?>a|)*\\d" []-        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",-         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]-        [Nothing,-         Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]-    ,--    testRegex "( (A | (?(1)0|) )*   )" [extended]-        ["abcd"]-        [Just ["", "", ""]]--    ,-    testRegex "^[\\w]+" []-        ["*** Failers",-         "\201cole"]-        [Nothing,-         Nothing]----    ,-    testRegex "^[\\w]+" []-        ["*** Failers",-         "\201cole"]-        [Nothing,-         Nothing]--{--    ,--    testRegex "(a.b(?s)c.d|x.y)p.q" []-        ["a+bc+dp+q",-         "a+bc\ndp+q",-         "x\nyp+q ",-         "a\nbc\ndp+q",-         "a+bc\ndp\nq",-         "x\nyp\nq "-         ]-        [Just ["a+bc+dp+q"],-         Just ["a+bc\ndp+q"],-         Just ["x\nyp+q"],-         Nothing,-         Nothing,-         Nothing-         ]-         -}--    ,-    testRegex "a\\d\\z" []-        ["ba0",-         "*** Failers",-         "ba0\n",-         "ba0\ncd   "]-        [Just ["a0"],-         Nothing,-         Nothing,-         Nothing]--    ,-    testRegex "a\\d\\Z" []-        ["ba0",-         "ba0\n",-         "ba0\ncd   "]-        [Just ["a0"],-         Just ["a0"],-         Nothing]--    ,-    testRegex "a\\d$" []-        ["ba0",-         "ba0\n",-         "*** Failers",-         "ba0\ncd   "]-        [Just ["a0"],-         Just ["a0"],-         Nothing,-         Nothing]-    ,-    testRegex "a+" []-        ["aaaa"]-        [Just ["aaaa"]]----    ,-    testRegex "^\\d{2,3}X" []-        ["12X",-         "123X",-         "*** Failers",-         "X",-         "1X",-         "1234X     "]-        [Just ["12X"],-         Just ["123X"],-         Nothing,-         Nothing,-         Nothing,-         Nothing]---    ,-    testRegex "^[abcd]\\d" []-        ["a45",-         "b93",-         "c99z",-         "d04",-         "*** Failers",-         "e45",-         "abcd      ",-         "abcd1234",-         "1234  "]-        [Just ["a4"],-         Just ["b9"],-         Just ["c9"],-         Just ["d0"],-         Nothing,-         Nothing,-         Nothing,-         Nothing,-         Nothing]---{--    ,-    testRegex "^(a*\\w|ab)=(a*\\w|ab)" []-        ["ab=ab"]-        [Just ["ab=ab", "ab"]]-        -}---    ,-    testRegex "^(a*\\w|ab)=(?1)" []-        ["ab=ab"]-        [Just ["ab=ab", "ab"]]---{--    ,-    testRegex "^([^()]|\\((?1)*\\))*$" []-        ["abc",-         "a(b)c",-         "a(b(c))d  ",-         "*** Failers)",-         "a(b(c)d  "]-        [Just ["abc"],-         Just ["a(b)c"],-         Just ["a(b(c))d"],-         Nothing,-         Nothing]--    ,-    testRegex "^>abc>([^()]|\\((?1)*\\))*<xyz<$" []-        [">abc>123<xyz<",-         ">abc>1(2)3<xyz<",-         ">abc>(1(2)3)<xyz<"]-        [Just [">abc>123<xyz<"],-         Just [">abc>1(2)3<xyz<"],-         Just [">abc>(1(2)3)<xyz<"]]---}--    ,-    testRegex "^(?>a*)\\d" []-        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876",-         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]-        [Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9"],-         Nothing]------    ,-    testRegex "(?<=abc|xy)123" []-        ["abc12345",-         "wxy123z",-         "*** Failers",-         "123abc"]-        [Just ["123"],-         Just ["123"],-         Nothing,-         Nothing]---    ,-    testRegex "(?<!abc|xy)123" []-        ["123abc",-         "mno123456 ",-         "*** Failers",-         "abc12345",-         "wxy123z"]-        [Just ["123"],-         Just ["123"],-         Nothing,-         Nothing,-         Nothing]--    ,-    testRegex "abc(?C1)xyz" []-        ["abcxyz",-         "123abcxyz999 "]-        [ Just ["abcxyz"],-         Just ["abcxyz"]]------{--    ,-    testRegex "\\Gabc" []-        ["abcdef",-         "defabcxyz\\>3 ",-         "defabcxyz"]-        [Just ["abc"],-         Just ["abc"],-         Nothing]-         -}--    ,--    testRegex "[\\xFF]" []-        [">\xff<"]-        [Just ["\xff"]]--    ,-    testRegex "[^\\xFF]" []-        ["XYZ"]-        [Just ["X"]]---    ,-    testRegex "^\\pN{2,3}X" []-        ["12X",-         "123X",-         "*** Failers",-         "X",-         "1X",-         "1234X     "]-        [Just ["12X"],-         Just ["123X"],-         Nothing,-         Nothing,-         Nothing,-         Nothing]--- ]
− tests/failure1.hs
@@ -1,5 +0,0 @@-import Text.Regex.PCRE.Light.Char8--main = do-    let r = compile "(a|)*\\d" []-    print (match r "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" [])