我似乎找不到关于 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.PosixdefaultCompOpt = 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/

10-14 02:11