Elixir’s regex is based on PCRE (Perl Compatible Regular Expressions).
The Regex
module gives us the following methods:
run
scan
split
replace
run
runs the regular expression against the given string until the first match.
iex> Regex.run(~r{c(d)}, "abcd")
["cd", "d"]
iex> Regex.run(~r{e}, "abcd")
nil
You can use the
~r{<regex>}
sigil or~r/<regex>/
. Using the curly brackets version is more convenient as you can match/
forward slash characters without having to escape it.
scan
performs run
several times collecting all matches of the regular expression.
iex> Regex.scan(~r/c(d|e)/, "abcd abce")
[["cd", "d"], ["ce", "e"]]
split
splits the given target based on the given pattern.
iex> Regex.split(~r/-/, "a-b-c")
["a", "b", "c"]
replace
takes in a regex, a string and a replacement, returns a new string where all matches are replaced by the replacement.
iex> Regex.replace(~r/b/, "abc", "d")
"adc"
iex> Regex.replace(~r/b/, "abc", "[\\0]") #\\N refers to the Nth character of the match
"a[b]c"
iex> Regex.replace(~r/a(b|d)c/, "abcadc", "[\\1]")
"[b][d]"
iex> Regex.replace(~r/a(b|d)c/, "abcadc", fn _, x -> "[#{x}]" end) # You can also pass functions as the replacement argument
"[b][d]"
Additional reading: