gpt4 book ai didi

regex - 如何在 regex-tdfa 正则表达式中控制 CompOption "multiline"? ( haskell )

转载 作者:行者123 更新时间:2023-12-04 02:19:17 25 4
gpt4 key购买 nike

这里是 Haskell 菜鸟。我正在使用 regex-tdfa(无特殊原因)来(尝试)匹配多行代码文件 block (XAML,是的,我知道正则表达式和解析 XML 以及 the-ponies-they-come post)。

如果我在代码中使用简单的正则表达式

fileContents =~ "<UserControl.Resources>"

我的文件被点击了。是的。

如果我将正则表达式“升级”为“ .* ”之类的内容,那么我将无法获得任何匹配。所以,我认为我的问题是多行正则表达式和说服引擎跨多行匹配。

问题是,我是一个菜鸟,我不知道该怎么做。我所知道的是我从 Real World HaskellLearn You a Haskell 中学到的东西,而这些并没有谈论正则表达式编译选项。

所以,我可以强制结果如

fileContents =~ "<UserControl.Resources>" :: (String, String, String)

但这就是我所知道的。

如何关闭多线? (出于某种原因,我认为它已开启。)

最佳答案

regex-tdfa 编译选项的定义可以在这里找到:

https://hackage.haskell.org/package/regex-tdfa-1.2.0/docs/src/Text-Regex-TDFA-Common.html#CompOption

文档说 multiLine 默认设置为 True

这是一种使用自定义选项编译和执行正则表达式的方法:

{-# LANGUAGE FlexibleContexts #-}

import Text.Regex.TDFA

toRegex = makeRegexOpts defaultCompOpt{multiline=False} defaultExecOpt

test str =
if match (toRegex "<Tag>.*</Tag>") str
then putStrLn "matches"
else putStrLn "does not match"

test2 fileContents =
match (toRegex "<Tag>.*</Tag>") fileContents :: (String, String, String)

请注意,match 是多态的,就像 =~ 一样。

您可以在 hledger-lib 包中找到使用自定义正则表达式选项的代码:

https://hackage.haskell.org/package/hledger-lib-0.26/docs/src/Hledger-Utils-Regex.html#Regexp

关于regex - 如何在 regex-tdfa 正则表达式中控制 CompOption "multiline"? ( haskell ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32149354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com