Elixir Regex 正则表达式

Posted by zhulinpinyu on July 10, 2017
iex> path = "/bears?id=1"
iex> regex = ~r{\/(\w+)\?id=(\d+)}

iex> Regex.match?(regex, path) # true

此处正则表达式的括弧似乎意义不大。

~r{}声明正则表达式。

iex> path = "/bears?id=1"
iex> regex = ~r{\/(?<thing>\w+)\?id=(?<id>\d+)}
iex> Regex.named_captures(regex, path)
%{"id" => "1", "thing" => "bears"}

?<thing> 用于存储匹配 \w+的结果 ?<id> 用于存储匹配 \d+的结果

另,注意括号()的使用,作用是界定匹配的范围。

iex> regex = ~r{\/?<thing>\w+\?id=?<id>\d+}
iex> Regex.named_captures(regex, path)
#nil

使用=~做正则匹配判断

iex> str = "once upon a time"
"once upon a time"
iex> str =~ ~r/u..n/
true
iex> str =~ ~r/u..m/
false

tips: 一个点.表示一个字符。上述的解释是:str中是否包含以u开头以n结尾,length为4(u, n 外加两个点)的字符串。str中upon符合要求所以运算结果为true