7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Elixir Regular Expressions

Posted at

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"]

参照

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?