Haskell Posix中的多线匹配

Ian*_*ott 4 regex haskell posix functional-programming cabal

我似乎无法在haskell的POSIX实现上找到合适的文档.特别是模块Text.Regex.Posix.

有人能指出我在字符串上使用多行匹配的正确方向吗?

一个奇怪的片段:

> extractToken body = body =~ "<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>" :: String
Run Code Online (Sandbox Code Playgroud)

我正在尝试提取维基百科页面的来源,但是当涉及多行时,这种方法显然会失败.

eph*_*ent 7

您可能需要import Text.Regex.Base.RegexLike访问makeRegexOpts和朋友.

extractToken body = match regex body where
    regex = makeRegexOpts (defaultCompOpt - compNewline) defaultExecOpt
              "<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>"
Run Code Online (Sandbox Code Playgroud)

好吧,既然Text.Regex.PosixdefaultCompOpt = compExtended + compNewline,即等效工作了作为

extractToken body = match regex body where
    regex = makeRegexOpts compExtended defaultExecOpt
              "<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>"
Run Code Online (Sandbox Code Playgroud)

要仅提取第一个组,请使用其中一个实例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>"
Run Code Online (Sandbox Code Playgroud)