在haskell中使用Text.Regex.Posix时如何匹配忽略大写或小写的字符串?

时间:2017-10-17 01:37:31

标签: regex haskell

我知道posix正则表达式使用?我忽略大写或小写

但是当我测试它时:

"a" =~ "?i:a" :: Bool

我收到了错误。

如何正确写作?

1 个答案:

答案 0 :(得分:0)

使用?i:前缀表示不区分大小写的正则表达式不是正则表达式的POSIX标准的一部分,Text.Regex.Posix不支持它。相反,您需要在编译正则表达式时指定标志。这意味着您无法使用=~运算符,因为该运算符始终使用默认编译标志。

相反,您可能想要定义辅助函数:

{-# LANGUAGE FlexibleContexts #-}

import Data.Bits
import Text.Regex.Posix

-- | Compile a case-insensitive regular expression.
makeIRegex :: RegexMaker Regex CompOption ExecOption source => source -> Regex
makeIRegex = makeRegexOpts (defaultCompOpt .|. compIgnoreCase) defaultExecOpt

然后你可以写:

> match (makeIRegex "a") "a" :: Bool
True
> match (makeIRegex "a") "A" :: Bool
True
>