用于重复的 PCRE 正则表达式约束

PCRE regex contraint for repetition

谁能告诉我如何编写包含 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. 您需要用 ^$ 锚定两端,这样长度才有意义。
  2. 先行 (?!.*?(\d)(.*?){5,}) 断言相同数字不超过 5 个。
  3. 匹配 \d{9} 匹配 9 个数字。

所以:

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

做到了。

Demo

如评论中所述——感谢 Bart Kiers 完善了负面前瞻,它可以 (?!.*?(\d)(.*?){5}) 但这只是稍微快一点。


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

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

Demo