MatchPS: The Perl-like matching interface

Haskell Libraries
Prev | Chapter 8. The `text` package: text manipulation | Next

# 8.2. `MatchPS`: The Perl-like matching interface

(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

Prev | Home | Next
The `text` package: text manipulation | Up | `Parsec`: Parsing combinators