| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Text.Regex.PCRE.Heavy
Description
A usable regular expressions library on top of pcre-light.
- (=~) :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => a -> Regex -> Bool
- (≈) :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => a -> Regex -> Bool
- scan :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => Regex -> a -> [(a, [a])]
- scanO :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => Regex -> [PCREExecOption] -> a -> [(a, [a])]
- scanRanges :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => Regex -> a -> [((Int, Int), [(Int, Int)])]
- scanRangesO :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => Regex -> [PCREExecOption] -> a -> [((Int, Int), [(Int, Int)])]
- sub :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS, RegexReplacement r) => Regex -> r -> a -> a
- subO :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS, RegexReplacement r) => Regex -> [PCREExecOption] -> r -> a -> a
- gsub :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS, RegexReplacement r) => Regex -> r -> a -> a
- gsubO :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS, RegexReplacement r) => Regex -> [PCREExecOption] -> r -> a -> a
- split :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => Regex -> a -> [a]
- splitO :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => Regex -> [PCREExecOption] -> a -> [a]
- re :: QuasiQuoter
- mkRegexQQ :: [PCREOption] -> QuasiQuoter
- data Regex :: *
- data PCREOption :: *
- compileM :: ByteString -> [PCREOption] -> Either String Regex
- rawMatch :: Regex -> SBS -> Int -> [PCREExecOption] -> Maybe [(Int, Int)]
- rawSub :: RegexReplacement r => Regex -> r -> SBS -> Int -> [PCREExecOption] -> Maybe (SBS, Int)
Matching
(=~) :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => a -> Regex -> Bool Source
Checks whether a string matches a regex.
>>>:set -XQuasiQuotes>>>:set -XFlexibleContexts>>>"https://unrelenting.technology" =~ [re|^http.*|]True
(≈) :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => a -> Regex -> Bool Source
Same as =~.
Checks whether a string matches a regex.
>>>:set -XQuasiQuotes>>>:set -XFlexibleContexts>>>"https://unrelenting.technology" =~ [re|^http.*|]True
scan :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => Regex -> a -> [(a, [a])] Source
Searches the string for all matches of a given regex.
>>>scan [re|\s*entry (\d+) (\w+)\s*&?|] (" entry 1 hello &entry 2 hi" :: String)[(" entry 1 hello &",["1","hello"]),("entry 2 hi",["2","hi"])]
It is lazy! If you only need the first match, just apply head (or
headMay from the "safe" library) -- no extra work will be performed!
>>>head $ scan [re|\s*entry (\d+) (\w+)\s*&?|] (" entry 1 hello &entry 2 hi" :: String)(" entry 1 hello &",["1","hello"])
scanO :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => Regex -> [PCREExecOption] -> a -> [(a, [a])] Source
Exactly like scan, but passes runtime options to PCRE.
scanRanges :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => Regex -> a -> [((Int, Int), [(Int, Int)])] Source
scanRangesO :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => Regex -> [PCREExecOption] -> a -> [((Int, Int), [(Int, Int)])] Source
Exactly like scanRanges, but passes runtime options to PCRE.
Replacement
sub :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS, RegexReplacement r) => Regex -> r -> a -> a Source
Replaces the first occurence of a given regex.
>>>sub [re|thing|] "world" "Hello, thing thing" :: String"Hello, world thing"
>>>sub [re|a|] "b" "c" :: String"c"
>>>sub [re|bad|] "xxxbad" "this is bad, right?" :: String"this is xxxbad, right?"
You can use functions! A function of ConvertibleStrings SBS gets the full match. A function of [ConvertibleStrings SBS] gets the groups. A function of ConvertibleStrings SBS → [ConvertibleStrings SBS] gets both.
>>>sub [re|%(\d+)(\w+)|] (\(d:w:_) -> "{" ++ d ++ " of " ++ w ++ "}" :: String) "Hello, %20thing" :: String"Hello, {20 of thing}"
subO :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS, RegexReplacement r) => Regex -> [PCREExecOption] -> r -> a -> a Source
Exactly like sub, but passes runtime options to PCRE.
gsub :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS, RegexReplacement r) => Regex -> r -> a -> a Source
Replaces all occurences of a given regex.
See sub for more documentation.
>>>gsub [re|thing|] "world" "Hello, thing thing" :: String"Hello, world world"
>>>gsub [re||] "" "Hello, world" :: String"Hello, world"
https://github.com/myfreeweb/pcre-heavy/issues/2 >>> gsub [re|good|] "bad" "goodgoodgood" :: String "badbadbad"
>>>gsub [re|bad|] "xxxbad" "this is bad, right? bad" :: String"this is xxxbad, right? xxxbad"
gsubO :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS, RegexReplacement r) => Regex -> [PCREExecOption] -> r -> a -> a Source
Exactly like gsub, but passes runtime options to PCRE.
Splitting
split :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => Regex -> a -> [a] Source
Splits the string using the given regex.
Is lazy.
>>>split [re|%(begin|next|end)%|] ("%begin%hello%next%world%end%" :: String)["","hello","world",""]
>>>split [re|%(begin|next|end)%|] ("" :: String)[""]
splitO :: (ConvertibleStrings SBS a, ConvertibleStrings a SBS) => Regex -> [PCREExecOption] -> a -> [a] Source
Exactly like split, but passes runtime options to PCRE.
QuasiQuoter
re :: QuasiQuoter Source
A QuasiQuoter for regular expressions that does a compile time check.
mkRegexQQ :: [PCREOption] -> QuasiQuoter Source
Returns a QuasiQuoter like re, but with given PCRE options.
Types and stuff from pcre-light
data Regex :: *
An abstract pointer to a compiled PCRE Regex structure The structure allocated by the PCRE library will be deallocated automatically by the Haskell storage manager.
data PCREOption :: *
A type for PCRE compile-time options. These are newtyped CInts, which can be bitwise-or'd together, using '(Data.Bits..|.)'
Instances
compileM :: ByteString -> [PCREOption] -> Either String Regex
Advanced raw stuff
rawMatch :: Regex -> SBS -> Int -> [PCREExecOption] -> Maybe [(Int, Int)] Source
Does raw PCRE matching (you probably shouldn't use this directly).
>>>:set -XOverloadedStrings>>>rawMatch [re|\w{2}|] "a a ab abc ba" 0 []Just [(4,6)]>>>rawMatch [re|\w{2}|] "a a ab abc ba" 6 []Just [(7,9)]>>>rawMatch [re|(\w)(\w)|] "a a ab abc ba" 0 []Just [(4,6),(4,5),(5,6)]