You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试MyDLP时如何将PCRE正则转换为Erlang正则?

解决Erlang re库兼容的PCRE正则转换问题

让我来帮你搞定这个正则适配的问题——我对Erlang的re库和PCRE的细微差异很熟悉,咱们一步步梳理:

首先,先拆解你原正则的意图:看起来你是要匹配一个11位的编号,结构应该是:

  • 首位:3-6之间的数字
  • 接下来两位:任意数字
  • 月份首位:0或1
  • 月份次位:任意数字
  • 再两位:任意数字
  • 最后四位:任意数字

原正则的核心问题

你写的[0,1]是错误的!在PCRE(包括Erlang的re库)的字符类[]里,逗号会被当成普通字符匹配,而不是表示“或”的逻辑。你真正需要的是[01](直接列出可选字符)或者[0-1](用范围表示),这两种写法都能正确匹配0或1。

适配Erlang的修正正则

Erlang的re库本身完全支持标准PCRE语法,只需要注意字符串里的反斜杠转义(或者用二进制来避免转义麻烦)。修正后的正则可以写成两种形式:

1. 字符串形式(注意反斜杠要转义)

"[3-6]\\d{2}[01]\\d\\d{2}\\d{4}"

(这里用\d代替[0-9]是等价的,更简洁;如果你习惯用[0-9],替换后完全没问题)

2. 二进制形式(无需额外转义,更推荐)

<<"[3-6]\\d{2}[01]\\d\\d{2}\\d{4}">>

测试你的号码

用Erlang代码测试你的测试号码49102050805,示例代码如下:

% 二进制版本测试
re:run(<<"49102050805">>, <<"[3-6]\\d{2}[01]\\d\\d{2}\\d{4}">>, [{capture, all, binary}]).

执行后会返回{match, [<<"49102050805">>]},说明匹配成功。

额外建议

如果你需要严格匹配整个字符串(避免匹配包含该模式的更长文本),记得在正则前后加上锚点^和$:

<<"^[3-6]\\d{2}[01]\\d\\d{2}\\d{4}$">>

这样就只会匹配刚好11位符合规则的编号,不会误匹配更长的字符串。

内容的提问来源于stack exchange,提问作者Bandymi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:21:22