Elixir Regular Expressions
概要
Elixir の Regular Expressions について。
Elixir の 正規表現は
~r/regex/opts
のフォーマットで利用します。
囲み文字のスラッシュは他の文字でも代用できます。詳しくは Sigils 参照。
opts はオプションです。
Elixir の正規表現は PCRE (Perl Compatible Regular Expressions) を採用しています。
compile(source, options \ "")
正規表現をコンパイルする。
不正な正規表現を指定した場合は、
{:error, {'missing terminating ] for character class', 4}}
のような値が返却される。
Regex.compile("hoge")
Regex.compile("A-Z")
Regex.compile("[A-Z]")
Regex.compile("[A-Z]", "i")
Regex.compile("[A-Z", "i")
- 出力
{:ok, ~r/hoge/}
{:ok, ~r/A-Z/}
{:ok, ~r/[A-Z]/}
{:ok, ~r/[A-Z]/i}
{:error, {'missing terminating ] for character class', 4}}
compile!(source, options \ "")
正規表現をコンパイルする。
compile との違いは、不正な正規表現指定時に例外が発生すること。
Regex.compile!("[A-Z", "i")
** (Regex.CompileError) missing terminating ] for character class at position 4
(elixir) lib/regex.ex:140: Regex.compile!/
escape(string)
正規表現のキーワードをエスケープする。
IO.inspect Regex.escape("test")
IO.inspect Regex.escape(".")
IO.inspect Regex.escape("{")
- 出力
"test"
"\\."
"\\{"
match?(regex, string)
正規表現に一致するか真偽値で判定する。
IO.inspect Regex.match?(~r/h.ge/, "hoge")
IO.inspect Regex.match?(~r/h.ge/, "hige")
IO.inspect Regex.match?(~r/h.ge/, "hohe")
- 出力
true
true
false
named_captures(regex, string, options \ [])
名前付きキャプチャを利用した正規表現の実行
reg = ~r/(?<prefix>.*?)\|(?<main>.*?)\|(?<sufix>.*)/
IO.inspect Regex.named_captures(reg, "pre_value|main_value|sufix_value")
- 出力
%{"main" => "main_value", "prefix" => "pre_value", "sufix" => "sufix_value"}
names(regex)
名前付きキャプチャを利用した正規表現の名前のみを取得
reg = ~r/(?<prefix>.*?)\|(?<main>.*?)\|(?<sufix>.*)/
IO.inspect Regex.names(reg)
- 出力
["main", "prefix", "sufix"]
opts(regex)
正規表現中のオプションを取得
IO.inspect Regex.opts(~r/hoge/im)
- 出力
"im"
replace(regex, string, replacement, options \ [])
正規表現を利用した置換
IO.inspect Regex.replace(~r/xyz/, "vwxyz", "@")
IO.inspect Regex.replace(~r/v(x|y)z/, "vxzvyz", "[\\1]")
IO.inspect Regex.replace(~r/v(x|y)z/, "vxzvyz", fn _, x -> x <> "@" end)
- 出力
"vw@"
"[x][y]"
"x@y@"
run(regex, string, options \ [])
正規表現を実行し、最初にマッチした結果のみを返却する
IO.inspect Regex.run(~r/h.ge/, "hogehigehage")
- 出力
["hoge"]
scan(regex, string, options \ [])
正規表現を実行し、最初にマッチした結果全体を返却する
IO.inspect Regex.scan(~r/h.ge/, "hogehigehage")
- 出力
[["hoge"], ["hige"], ["hage"]]
source(regex)
正規表現のソースを取得する
IO.inspect Regex.source(~r/h.ge/i)
- 出力
"h.ge"
split(regex, string, options \ [])
正規表現で対象文字列を配列に分割する
IO.inspect Regex.split(~r/[,\|\t]/, "hoge,hige\thage|end")
- 出力
["hoge", "hige", "hage", "end"]
参照