環境
Haskell Stackを利用。
$ stack --version Version 2.1.3 x86_64
インストール
stack install
コマンドでインストールする。
$ stack install regex-posix
インストールできたら、ghciを起動してインポートすれば準備完了。
$ stack ghci Prelude> import Text.Regex.Posix
使い方
=~
演算子を使う。末尾に型をつけないとエラーになるので注意が必要。
Prelude import Text.Regex.Posix> "foo bar baz" =~ "foo" :: Bool True Prelude import Text.Regex.Posix> "foo bar baz" =~ "hoge" :: Bool False Prelude import Text.Regex.Posix> "foo bar baz" =~ "hoge" <interactive>:4:1: error: • Non type-variable argument in the constraint: RegexContext Regex [Char] target (Use FlexibleContexts to permit this) • When checking the inferred type it :: forall target. RegexContext Regex [Char] target => target
指定する型を変えると、いろいろな返り値を得ることができる。
Prelude Text.Regex.Posix> "foo bar baz" =~ "ba." :: Bool True -- マッチしたかどうか Prelude Text.Regex.Posix> "foo bar baz" =~ "ba." :: Int 2 -- マッチした回数 Prelude Text.Regex.Posix> "foo bar baz" =~ "ba." :: String "bar" -- 最初にマッチしたもの Prelude Text.Regex.Posix> "foo bar baz" =~ "ba." :: [[String]] [["bar"],["baz"]] -- マッチしたもの全て
他にも色々ありそうだが、基本的な操作は上記のもので事足りそう。
Prelude Text.Regex.Posix> "foo bar baz" =~ "ba." :: (Int, Int) (4,3) -- (マッチした位置, マッチした長さ) Prelude Text.Regex.Posix> "foo bar baz" =~ "ba." :: (String, String, String) ("foo ","bar"," baz") -- (マッチした部分より前, マッチした部分, マッチした部分より後)