我似乎无法找到关于haskell的POSIX实现的体面文档。 具体是模块Text.Regex.Posix
。Haskell Posix中的多行匹配
任何人都可以指出我正确的方向使用字符串上的多行匹配吗?
一种好奇的片段:
> extractToken body = body =~ "<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>" :: String
我试图提取维基百科页面的源,当多行参与然而,这种方法显然不属于以上。
我似乎无法找到关于haskell的POSIX实现的体面文档。 具体是模块Text.Regex.Posix
。Haskell Posix中的多行匹配
任何人都可以指出我正确的方向使用字符串上的多行匹配吗?
一种好奇的片段:
> extractToken body = body =~ "<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>" :: String
我试图提取维基百科页面的源,当多行参与然而,这种方法显然不属于以上。
您可能需要import Text.Regex.Base.RegexLike
才能访问makeRegexOpts
和朋友。
extractToken body = match regex body where
regex = makeRegexOpts (defaultCompOpt - compNewline) defaultExecOpt
"<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>"
好吧,既然Text.Regex.Posix
的defaultCompOpt = compExtended + compNewline
,即等效工作了作为
extractToken body = match regex body where
regex = makeRegexOpts compExtended defaultExecOpt
"<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>"
拉出只是第一组,使用的RegexLike
其他实例之一。一种可能性是
extractToken body = head groups where
(preMatch, inMatch, postMatch, groups) =
match regex body :: (String, String, String, [String])
regex = makeRegexOpts compExtended defaultExecOpt
"<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>"
如果您想要做比Posix正则表达式更灵活或性能更好的任何事情,您可能需要使用PCRE后端。
pcre-light和regex-pcre都很好。
肯定是优先选择,但是我们的研究小组来我们学校的服务器,谁可能会或可能不会批准增加新的模块上运行此。 – 2009-06-22 19:37:06
我在这种情况下,解决了匹配
((.*)|\n*)*
尽管这可能并不总是可行取决于你的表达。 上述解决方案可能是最好的方法,如果你能够。
很好,谢谢。此外,有没有什么办法可以只返回匹配(。*),还是只有在PCRE中? – 2009-06-22 21:02:16