PCRE正则表达式禁止重复

时间:2017-09-04 19:15:10

标签: regex sas pcre

有没有人可以告诉我如何编写包含9个数字的PCRE正则表达式,字符串最多可以包含5个单个数字的副本。我无法找到复制的约束。

我在sas中使用perl正则表达式

data regexp;
    if _n_=1 then pattern=prxparse("~^(48|0|48|0048|)+[1-9]{1}+[0-9]{8}~o");
    retain pattern;
    set new;
    if prxmatch(pattern,nr_tel) then flg=1; else flg=0;
run;

谢谢。 更重要的是: 我试图获得前缀为48或没有前缀的9位数字。 (48 | 0 | 48 | 0048 |)此部分不适用于无前缀。

1 个答案:

答案 0 :(得分:1)

  1. 您需要使用^$来锚定两端,以便长度具有意义。
  2. 前瞻(?!.*?(\d)(.*?\1){5,})断言不超过5个相同的数字。
  3. 匹配\d{9}匹配9位数。
  4. 所以:

    /^(?!.*?(\d)(.*?\1){5,})\d{9}$/ 
    

    做到了。

    Demo

    正如评论中所述 - 感谢Bart Kiers完善负面预测,它可能是(?!.*?(\d)(.*?\1){5}),但这只是稍微快一些。

    如果你想要一个可选的前缀,你可以这样做:

    /^(?!.*?(\d)(.*?\1){5,})(?:048|48)?\d{9}$/
    

    Demo