(Sigbjørn Finne supplied the regular-expressions interface.)
The MatchPS module provides Perl-like
``higher-level'' facilities to operate on
PackedStrings (Section 4.24). The
regular expressions in question are in Perl syntax. The ``flags'' on
various functions can include: i
for
case-insensitive, s
for single-line mode, and
g
for global. (It's probably worth your time to
peruse the source code…)
matchPS :: PackedString -- regexp -> PackedString -- string to match -> [Char] -- flags -> Maybe REmatch -- info about what matched and where searchPS :: PackedString -- regexp -> PackedString -- string to match -> [Char] -- flags -> Maybe REmatch -- Perl-like match-and-substitute: substPS :: PackedString -- regexp -> PackedString -- replacement -> [Char] -- flags -> PackedString -- string -> PackedString -- same as substPS, but no prefix and suffix: replacePS :: PackedString -- regexp -> PackedString -- replacement -> [Char] -- flags -> PackedString -- string -> PackedString match2PS :: PackedString -- regexp -> PackedString -- string1 to match -> PackedString -- string2 to match -> [Char] -- flags -> Maybe REmatch search2PS :: PackedString -- regexp -> PackedString -- string to match -> PackedString -- string to match -> [Char] -- flags -> Maybe REmatch -- functions to pull the matched pieces out of an REmatch: getMatchesNo :: REmatch -> Int getMatchedGroup :: REmatch -> Int -> PackedString -> PackedString getWholeMatch :: REmatch -> PackedString -> PackedString getLastMatch :: REmatch -> PackedString -> PackedString getAfterMatch :: REmatch -> PackedString -> PackedString -- (reverse) brute-force string matching; -- Perl equivalent is index/rindex: findPS, rfindPS :: PackedString -> PackedString -> Maybe Int -- Equivalent to Perl "chop" (off the last character, if any): chopPS :: PackedString -> PackedString -- matchPrefixPS: tries to match as much as possible of strA starting -- from the beginning of strB (handy when matching fancy literals in -- parsers): matchPrefixPS :: PackedString -> PackedString -> Int