Cookbook/Pattern matching

From HaskellWiki

Introduction[edit]

Regular expressions are useful in some situations where the Data.List library is unwieldy. Posix style regular expressions are available in the core libraries, and a suite of other regular expression libraries are [also available], including PCRE and TRE-style regexes.

Bryan O'Sullivan has written a nice introduction to using the new regex libraries. This page describes the (=~) interface.

Text.Regex interface[edit]

Using the Text.Regex module, expressions can be applied with matchRegex and mkRegex with Maybe [String] results. Documentation for this module can be found on the Hackage regex-compat page.

$ ghci
Prelude> :m +Text.Regex

For boolean-style (either it succeeded or failed) results:

Prelude Text.Regex> matchRegex (mkRegex "a") "aabc"
Just []

Prelude Text.Regex> matchRegex (mkRegex "z") "aabc"
Nothing

With capturing results in the [String]:

Prelude Text.Regex> matchRegex (mkRegex "(a)") "aabc"
Just ["a"]

Prelude Text.Regex> matchRegex (mkRegex "(a+)") "aabc"
Just ["aa"]

Prelude Text.Regex> matchRegex (mkRegex "(a)(b)") "aabc"
Just ["a","b"]

Prelude Text.Regex> matchRegex (mkRegex "(z)") "aabc"
Nothing