序章
私は Haskell のText.Regex
ライブラリを使用しており、通常は正規表現で意味を持ついくつかの文字に一致させたいと考えています。Text.Regex
のドキュメントによると、
正規表現の構文は ... egrep の構文です (つまり、POSIX の「拡張」正規表現)。
そしてどうやら、 POSIX 拡張正規表現 (ERE)でのエスケープは [ POSIX 基本正規表現 (BRE)とは異なり] バックスラッシュを使用します。
問題
ただし、次のようなことをしようとすると:
> import Text.Regex
> matchRegex (mkRegex "\*") "*"
次のエラーが表示されます。
<interactive>:1:23:
lexical error in string/character literal at character '*'
の後にどんな文字を入れても同じことが起こり\
ます。
回避策
私はこのようなことができます:
> matchRegex (mkRegex "[*]") "*"
Just []
これは機能しますが、特に複数のものを連続してエスケープしたい場合(たとえばmkRegex "[[][(][)][]]"
、 which が一致する場合[()]
)、ハックのように思えます。
質問
これは POSIX ERE でエスケープする唯一の方法ですか? Haskell のライブラリは、本来あるべきと思われるエスケープをText.Regex
サポートしていないのはなぜですか?\