为啥正则表达式不起作用

Posted

技术标签:

【中文标题】为啥正则表达式不起作用【英文标题】:Why doesnt work regex为什么正则表达式不起作用 【发布时间】:2015-04-13 01:43:01 【问题描述】:

代码示例

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

为什么不匹配?

【问题讨论】:

【参考方案1】:

两件事:

    您传递给re:run 的正则表达式不应被/ 包围。在其他语言中,您在 / 符号内编写正则表达式,但在 Erlang 中,正则表达式始终写为字符串,因此不需要 / 符号。

    在 Erlang 字符串中,\d 表示“删除”字符(代码 127)。你在你的正则表达式中真正想要的是一个反斜杠,后跟字母d。为此,您需要使用另一个反斜杠来转义反斜杠:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于为啥正则表达式不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的产品代码的正则表达式不起作用? [关闭]

为啥这个正则表达式不起作用:r'.*logo.*' [重复]

为啥我的正则表达式组量词不起作用?

为啥这个 C# 正则表达式不起作用?

为啥 `\d` 在 sed 的正则表达式中不起作用? [复制]

为啥加号运算符在 JavaScript 的正则表达式中不起作用? [复制]