[Haskell-cafe] regex and Regular Expressions Libraries
qdunkan at gmail.com
Fri Mar 10 17:08:34 UTC 2017
On Fri, Mar 10, 2017 at 2:24 AM, Chris Dornan <chris at chrisdornan.com> wrote:
> By the sounds of it regex should help with this – each match operator being
> available in an un-overloaded format. Does this API work for you?
I looked at the tutorial and.... maybe not so much? I hardcode to
Text + PCRE since that's all I need, but that combination seems to be
unsupported. As a light user of regexes, I won't remember much of the
API between uses, so I'm just looking to find the 'Regex -> Text ->
Bool' function as fast as possible, and a bunch of polymorphic
operators I'll never remember would just get in the way. Also for the
same reason I'd be worried about any deviation from "standard" PCRE,
e.g. $(..) for groups. However, I'm a lightweight user, so don't take
me too seriously, and I made my own tiny little bikeshed anyway.
Which is to say don't let me rain on your parade :)
For what it's worth, I mostly used regexes in python, and it gets
along fine with hardcoded Text + PCRE, no operators, and basically
three functions: match, get groups, and substitute groups. So it's no
surprise my wrapper basically looks like that:
compileOptions :: [Option] -> String -> Either String Regex
matches :: Regex -> Text -> Bool
-- | Return (complete_match, [group_match]).
groups :: Regex -> Text -> [(Text, [Text])]
-- | Half-open ranges of where the regex matches.
groupRanges :: Regex -> Text -> [((Int, Int), [(Int, Int)])]
-- ^ (entire, [group])
substitute :: Regex -> (Text -> [Text] -> Text)
-- ^ (complete_match -> groups -> replacement)
-> Text -> Text
I also added a Show instance that shows the regex rather than hex and
the mysteriously missing:
-- | Escape a string so the regex matches it literally.
escape :: String -> String
The QuasiQuote stuff seems neat, but I'm sort of scared of TH, and if
the regex gets complicated enough that would make it worth it, I
probably already switched to a parser. Or I get regexes from user
input because of how succinct they are and that's runtime anyway.
More information about the Haskell-Cafe