我正在尝试执行正则表达式替换。因此我定义了以下表达式:
^(?:9903[0]*([0-9]*)){20}$
此表达式应与
匹配 99030000000000000001
99030000000000000011
99030000000000000111
99030000000000001111
99031111111111111111
但不是
9903111111111111111
事实上,在我使用{1,20}作为量词或完全删除它之前,上述表达式不起作用。但是,由于我想在不知道[0] *的长度和变量的长度的情况下检查整个字符串的长度,我的表达式出现了问题。
非常感谢您的帮助。
d
答案 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]*)$
编辑 我后来意识到,如果需要匹配99030000000000000000(在您的捕获组中获得0),那么您需要:
^9903(?=[0-9]{16}$)0*([0-9]+)$