Nic*_*unt 17 regex pcre haskell
我一直在寻找一些关于Haskell正则表达式的文档或教程.HaskellWiki页面上没有有用的信息.它只是给出了一个神秘的信息:
Documentation
Coming soonish.
Run Code Online (Sandbox Code Playgroud)
有一篇简短的博客文章,我发现它非常有用,但它只处理Posix正则表达式,而不是PCRE.
我一直在使用POSIX正则表达式的几个星期,我来,对于我的任务,我需要PCRE的结论.
我的问题是我不知道在Haskell中从哪里开始使用PCRE.我已经下载regex-pcre-builtin了cabal,但我需要一个简单匹配程序的例子来帮助我开始.
[(MatchOffset,MatchLength)]?非常感谢您的帮助!
Rom*_*aka 11
还有我写过的正则表达式 - 适用性.
我们的想法是,您可以为正则表达式的每个部分分配一些含义,然后组合它们,就像使用Parsec编写解析器一样.
这是一个例子 - 简单的URL解析.
import Text.Regex.Applicative
data Protocol = HTTP | FTP deriving Show
protocol :: RE Char Protocol
protocol = HTTP <$ string "http" <|> FTP <$ string "ftp"
type Host = String
type Location = String
data URL = URL Protocol Host Location deriving Show
host :: RE Char Host
host = many $ psym $ (/= '/')
url :: RE Char URL
url = URL <$> protocol <* string "://" <*> host <* sym '/' <*> many anySym
main = print $ "http://stackoverflow.com/questions" =~ url
Run Code Online (Sandbox Code Playgroud)
iva*_*anm 10
想要在Haskell中使用PCRE样式的正则表达式时有两个主要选项:
regex-pcre使用与该博客文章中描述的相同的界面(以及RWH,因为我认为该博客文章的扩展版本); 这可以选择性地延长pcre-less. regex-pcre-builtin似乎是这个的预发布快照,可能不应该使用.
pcre-light绑定到PCRE库.它不提供您所追求的返回类型,只提供所有匹配(如果有). 但是,pcre-light-extras包提供了一个MatchResult类,您可以为其提供这样的实例.这可以使用regexqq进行增强,它允许您使用准引用来确保您的正则表达式模式类型检查; 但是,它不适用于GHC-7(除非有人接管维护它,否则它不会).
所以,假设你选择regex-pcre:
好吧,我写了很多维基页面,可能写了"即将推出".regex-pcre包是我使用regex-base接口包装PCRE,其中regex-base用作几个非常不同的正则表达式引擎后端的接口.Don Stewart的pcre-light包没有这个抽象层,因此更小.
Text.Regex.Posix上的博客帖子使用我的regex-posix包,它也在regex-base之上.因此,除了PCRE的编译和执行选项不同之外,regex-pcre的使用将与该博客文章非常相似.
对于配置regex-pcre,Text.Regex.PCRE.Wrap模块具有您需要的常量.使用regex-base中的makeRegexOptsM指定选项.