2017-10-17 12 views
0

は、私は私が上部または下部ケースhaskellでText.Regex.Posixを使用しているときに大文字または小文字を無視する文字列の一致方法は? ?

を無視するように、POSIX正規表現の使用を知っているが、私はそれをテストする場合:

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

が、私はエラーを得ました。

これはどうやって書きますか?

+1

私の知る限り、 '私:?A'は有効な正規表現ではありませんPOSIXで。何か情報源がありますか? – ymonad

答えて

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 
> 
関連する問題