Personal tools

Cookbook/Pattern matching

From HaskellWiki

< Cookbook(Difference between revisions)
Jump to: navigation, search
 
 
Line 1: Line 1:
  +
== Introduction ==
 
Regular expressions are useful in some situations where the Data.List
 
Regular expressions are useful in some situations where the Data.List
 
library is unwieldy. Posix style regular expressions are available in
 
library is unwieldy. Posix style regular expressions are available in
Line 4: Line 5:
 
are [also available], including PCRE and TRE-style regexes.
 
are [also available], including PCRE and TRE-style regexes.
   
Bryan O'Sullivan has written [http://www.serpentine.com/blog/2007/02/27/a-haskell-regular-expression-tutorial/ a nice introduction] to using the new regex libraries.
+
Bryan O'Sullivan has written [http://www.serpentine.com/blog/2007/02/27/a-haskell-regular-expression-tutorial/ a nice introduction] to using the new regex libraries. This page describes the <tt>(=~)</tt> interface.
  +
  +
== Text.Regex interface ==
  +
  +
Using the Text.Regex module, expressions can be applied with <tt>matchRegex</tt> and <tt>mkRegex</tt> with <tt>Maybe [String]</tt> results. Documentation for this module can be found on the [http://hackage.haskell.org/package/regex-compat Hackage regex-compat page].
  +
  +
<blockquote><pre>$ ghci
  +
Prelude&gt; :m +Text.Regex</pre></blockquote>
  +
  +
For boolean-style (either it succeeded or failed) results:
  +
  +
<blockquote><pre>Prelude Text.Regex&gt; matchRegex (mkRegex "a") "aabc"
  +
Just []
  +
  +
Prelude Text.Regex&gt; matchRegex (mkRegex "z") "aabc"
  +
Nothing</pre></blockquote>
  +
  +
With capturing results in the <tt>[String]</tt>:
  +
  +
<blockquote><pre>Prelude Text.Regex&gt; matchRegex (mkRegex "(a)") "aabc"
  +
Just ["a"]
  +
  +
Prelude Text.Regex&gt; matchRegex (mkRegex "(a+)") "aabc"
  +
Just ["aa"]
  +
  +
Prelude Text.Regex&gt; matchRegex (mkRegex "(a)(b)") "aabc"
  +
Just ["a","b"]
  +
  +
Prelude Text.Regex&gt; matchRegex (mkRegex "(z)") "aabc"
  +
Nothing</pre></blockquote>

Latest revision as of 12:26, 22 October 2010

[edit] 1 Introduction

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.

[edit] 2 Text.Regex interface

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