为什么不工作正则表达式
Why doesnt work regex
代码示例
14> case re:run("5162754", "/^\d+$/") of {match, _} -> ok end.
** exception error: no case clause matching nomatch
15> case re:run(<<"5162754">>, "/^\d+$/") of {match, _} -> ok end.
** exception error: no case clause matching nomatch
为什么不匹配?
两件事:
您传递给 re:run
的正则表达式不应被 /
包围。在其他语言中,您在 /
符号内编写正则表达式,但在 Erlang 中,正则表达式始终写为字符串,因此不需要 /
符号。
在 Erlang 字符串中,\d
表示 "delete" 字符(代码 127)。您在正则表达式中真正想要的是反斜杠后跟字母 d
。为此,您需要使用另一个反斜杠转义反斜杠:
> re:run("5162754", "^\d+$").
{match,[{0,7}]}
尝试使用 [0-9] 它也可以使用反斜杠没有问题
re:run("5162754", "^[0-9]+$").
代码示例
14> case re:run("5162754", "/^\d+$/") of {match, _} -> ok end.
** exception error: no case clause matching nomatch
15> case re:run(<<"5162754">>, "/^\d+$/") of {match, _} -> ok end.
** exception error: no case clause matching nomatch
为什么不匹配?
两件事:
您传递给
re:run
的正则表达式不应被/
包围。在其他语言中,您在/
符号内编写正则表达式,但在 Erlang 中,正则表达式始终写为字符串,因此不需要/
符号。在 Erlang 字符串中,
\d
表示 "delete" 字符(代码 127)。您在正则表达式中真正想要的是反斜杠后跟字母d
。为此,您需要使用另一个反斜杠转义反斜杠:> re:run("5162754", "^\d+$"). {match,[{0,7}]}
尝试使用 [0-9] 它也可以使用反斜杠没有问题
re:run("5162754", "^[0-9]+$").