Copyright | (C) 2016-17 Chris Dornan |
---|---|
License | BSD3 (see the LICENSE file) |
Maintainer | Chris Dornan <[email protected]> |
Stability | RFC |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Text.RE
Description
- data Matches a
- matchesSource :: Matches a -> a
- allMatches :: Matches a -> [Match a]
- anyMatches :: Matches a -> Bool
- countMatches :: Matches a -> Int
- matches :: Matches a -> [a]
- data Match a
- matchSource :: Match a -> a
- matched :: Match a -> Bool
- matchedText :: Match a -> Maybe a
The Tutorial
We have a regex tutorial at http://tutorial.regex.uk.
How to use this library
This module just provides an overview of the key type on which the regex package is built. You will need to import one of the API modules of which there is a choice which will depend upon two factors:
- Which flavour of regular expression do you want to use? If you want Posix flavour REs then you want the TDFA modules, otherwise its PCRE for Perl-style REs.
- What type of text do you want to match: (slow)
String
s,ByteString
,ByteString.Lazy
,Text
,Text.Lazy
or the anachronisticSeq Char
or indeed a good old-fashioned polymorphic operators?
While we aim to provide all combinations of these choices, some of them are currently not available. In the regex package we have:
- Text.RE.TDFA
- Text.RE.TDFA.ByteString
- Text.RE.TDFA.ByteString.Lazy
- Text.RE.TDFA.RE
- Text.RE.TDFA.Sequence
- Text.RE.TDFA.String
- Text.RE.TDFA.Text
- Text.RE.TDFA.Text.Lazy
The PCRE modules are contained in the separate regex-with-pcre
package:
The Match Operators
The traditional =~
and =~~
operators are exported by the above
API module, but we recommend that you use the two new operators,
especially if you are not familiar with the old operators. We have:
txt ?=~ re
searches for a single match yielding a value of typeMatch
a
wherea
is the type of the text you are searching.txt *=~ re
searches for all non-overlapping matches intxt
, returning a value of typeMatches
a
.
The remainder of this module outlines these Matches
and
Match
result types. Only an outline is given here. For more details
see the Matches
and Match
modules.
Matches
the result type to use when every match is needed, not just the first match of the RE against the source
Instances
Functor Matches Source # | |
(RegexContext regex source [MatchText source], RegexLike regex source) => RegexContext regex source (Matches source) Source # | this instance hooks |
Eq a => Eq (Matches a) Source # | |
Show a => Show (Matches a) Source # | |
matchesSource :: Matches a -> a Source #
the source text being matched
anyMatches :: Matches a -> Bool Source #
tests whether the RE matched the source text at all
countMatches :: Matches a -> Int Source #
count the matches
Match
the result of matching a RE to a text once, listing the text that was matched and the named captures in the RE and all of the substrings matched, with the text captured by the whole RE; a complete failure to match will be represented with an empty array (with bounds (0,-1))
Instances
Functor Match Source # | |
(RegexContext regex source (AllTextSubmatches (Array Int) (source, (Int, Int))), RegexLike regex source) => RegexContext regex source (Match source) Source # | this instance hooks |
Eq a => Eq (Match a) Source # | |
Show a => Show (Match a) Source # | |
matchSource :: Match a -> a Source #
the whole source text
matchedText :: Match a -> Maybe a Source #
tests whether the RE matched the source text at all