我似乎找不到关于 haskell POSIX 实现的体面文档。
特别是模块 Text.Regex.Posix
。
任何人都可以指出我在字符串上使用多行匹配的正确方向吗?
好奇的片段:
> extractToken body = body =~ "<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>" :: String
我正在尝试提取维基百科页面的来源,但是当涉及多于一行时,这种方法显然会失败。
最佳答案
您可能需要 import Text.Regex.Base.RegexLike
才能访问 makeRegexOpts
和 friend 。
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>"
关于regex - Haskell Posix 中的多行匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1028764/