Haskell新手。我正在使用regex-tdfa(没有特别的原因)来(尝试)匹配多行代码文件块(XAML,是的,我知道regex和解析XML以及the-ponie -they-come post)。
如果我在代码中使用一个简单的正则表达式,如
fileContents =~ "<UserControl.Resources>"
我的文件中有点击。耶。
如果我将正则表达式"升级"为类似于"
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
和=~
一样是多态的。
你可以在ledger-lib包中找到使用自定义正则表达式选项的代码:
https://hackage.haskell.org/package/hledger -自由- 0.26/- docs/src/hledger跑龙套regex.html # Regexp