0

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

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

此表达式应匹配

    99030000000000000001
    99030000000000000011
    99030000000000000111
    99030000000000001111
    99031111111111111111

但不是

    9903111111111111111

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

非常感谢您提前提供的帮助。

D

4

2 回答 2

0

您可以通过预先检查字符串的长度来做到这一点

^(?=[0-9]{20}$)99030*[0-9]*

前瞻(?=...)是一个零宽度断言,用于检查字符串中的后续内容。在这里,它检查字符串末尾是否正好有 20 位数字。

于 2014-10-16T13:32:54.207 回答
0

您的初始正则表达式有很多问题。

{}部分应用于括号之间的整个部分。因此,您当前的正则表达式需要这部分:

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

全部重复 20 次,这不是你想要的。

然后这部分:

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

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

最后,我会这样做:

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

正则表达式101

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

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

正则表达式101

于 2014-10-16T14:06:04.217 回答