(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 |