正则表达式重复

时间:2014-10-16 13:21:09

标签: regex repeat quantifiers

我正在尝试执行正则表达式替换。因此我定义了以下表达式:

    ^(?:9903[0]*([0-9]*)){20}$

此表达式应与

匹配
    99030000000000000001
    99030000000000000011
    99030000000000000111
    99030000000000001111
    99031111111111111111

但不是

    9903111111111111111

事实上,在我使用{1,20}作为量词或完全删除它之前,上述表达式不起作用。但是,由于我想在不知道[0] *的长度和变量的长度的情况下检查整个字符串的长度,我的表达式出现了问题。

非常感谢您的帮助。

d

2 个答案:

答案 0 :(得分:0)

您可以通过使用lookahead

检查字符串的长度来执行此操作
^(?=[0-9]{20}$)99030*[0-9]*

前瞻(?=...)是一个带零的断言,用于检查字符串后面的内容。这里检查字符串结尾前正好有20个数字。

答案 1 :(得分:0)

您的初始正则表达式存在多处问题。

{}部分适用于括号内的整个部分。所以你现在的正则表达式需要这个部分:

(?:9903[0]*([0-9]*))

完整重复20次,这不是你想要的。

然后这部分:

[0]*([0-9]*)

没什么意义,你想在没有前导零的9903之后捕获数字吗?然后要求捕获以非零数字开头。 [0]是一个只有一个字符的字符类,相当于0

结论,我会这样做:

^9903(?=[0-9]{16}$)0*([1-9][0-9]*)$

Regex101

编辑 我后来意识到,如果需要匹配99030000000000000000(在您的捕获组中获得0),那么您需要:

^9903(?=[0-9]{16}$)0*([0-9]+)$

Regex101