加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – Haskell Posix中的多行匹配

发布时间:2020-12-14 06:02:29 所属栏目:百科 来源:网络整理
导读:我似乎无法在 haskell的POSIX实现上找到合适的文档. 特别是模块Text. Regex.Posix. 任何人都能指出我在字符串上使用多行匹配的正确方向吗? 一个奇怪的片段: extractToken body = body =~ "textarea[^]*id="wpTextbox1"[^]*(.*)/textarea" :: String 我正
我似乎无法在 haskell的POSIX实现上找到合适的文档.
特别是模块Text. Regex.Posix.

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

一个奇怪的片段:

> extractToken body = body =~ "<textarea[^>]*id="wpTextbox1"[^>]*>(.*)</textarea>" :: String

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

解决方法

您可能需要导入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])
    regex = makeRegexOpts compExtended defaultExecOpt
              "<textarea[^>]*id="wpTextbox1"[^>]*>(.*)</textarea>"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读