为什么不使用正则表达式

时间:2015-02-12 10:48:22

标签: regex erlang pattern-matching

代码示例

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

为什么它不匹配?

2 个答案:

答案 0 :(得分:3)

两件事:

  1. 您传递给re:run的正则表达式不应被/包围。在其他语言中,您在/符号内写了一个正则表达式,但在Erlang中,正则表达式总是写成字符串,因此不需要/符号。

  2. 在Erlang字符串中,\d代表&#34;删除&#34;字符(代码127)。你在regexp中真正想要的是一个反斜杠,后跟字母d。要实现这一点,您需要使用另一个反斜杠来转义反斜杠:

    > re:run("5162754", "^\\d+$").
    {match,[{0,7}]}
    

答案 1 :(得分:1)

尝试使用[0-9]它也可以使用,反斜杠没有问题

re:run("5162754", "^[0-9]+$").