Regex 用于匹配非零、零填充整数的正则表达式
我需要一个模式的帮助来匹配一个不是全零的零填充整数。它可以有0到n个前导零。到目前为止,我已经:Regex 用于匹配非零、零填充整数的正则表达式,regex,Regex,我需要一个模式的帮助来匹配一个不是全零的零填充整数。它可以有0到n个前导零。到目前为止,我已经: ^[0-9]{0,}[1-9]{1}$" 但由于最后一个零,这不会得到像000860这样的结果。我觉得这应该很简单,但我无法理解。任何帮助都将不胜感激 编辑:一些人问这是哪种引擎/语言。我认为regex是标准化的,所以没关系。但是它是.NET。你想赶上860吗 "000860".match(/^0*([1-9][0-9]*)$/)[1] 为什么不使用这个: ^0*[1-9][0-9]*$ ??
^[0-9]{0,}[1-9]{1}$"
但由于最后一个零,这不会得到像000860
这样的结果。我觉得这应该很简单,但我无法理解。任何帮助都将不胜感激
编辑:一些人问这是哪种引擎/语言。我认为regex是标准化的,所以没关系。但是它是.NET。你想赶上860吗
"000860".match(/^0*([1-9][0-9]*)$/)[1]
为什么不使用这个:
^0*[1-9][0-9]*$
??
顺便说一句,您没有指定正在使用的正则表达式引擎。但是上述模式应该适用于几乎所有的正则表达式引擎。这个正则表达式呢?
^0*[1-9]\d*$
只需使用以下正则表达式即可:
^0*[1-9][0-9]*$
这是我的看法:
0+[1-9]+[0-9]{0,}
它捕获至少一个零(在第一个0
之后附加?
,而不是+
,如果可能没有前导零),至少一个非零数字,然后是任意数量的零和其他数字
如果要捕获不带零的数字:
0+([1-9]+[0-9]{0,})
它只是将零件放在捕获组的前导零之后
成功解析所有这些内容:
000860
000860123
000800
000810
0008
为什么不将
[0-9]{0,}
(或[0-9]*
)也添加到$
之前?(顺便说一句:你也可以省略{1}
,它是隐式的)。@Wrikken——因为那样000000
就可以工作了。不,因为你仍然有所需的[1-9]
。所以,非零是必要的。啊……你说得对。这就行了。不过,下面的其他答案对于正则表达式引擎来说效率更高一些;)谢谢你的回答,不过稍微解释一下就好了。括号完全没用。。此外,您对所使用的语言进行了假设,没有添加任何解释,甚至没有提供真正的正则表达式,而是使用一个表达式将常量字符串与正则表达式匹配,并返回第二个匹配项,这将抛出索引超出范围的异常(或类似情况)-1正则表达式实际上是可用的。但是NET将正则表达式与字符串匹配:newregex(“/^0*[1-9][0-9]*$/”)。匹配(“000860”)因此,代码>是正确的。此btw返回类型为Match
的结果。我的观点是,你的答案值得投反对票。为什么0*
适用于前0个,但不适用于最后一个?换句话说,为什么我不能这样做:^0*[1-9]0*$
?您使用的是哪种编程语言或正则表达式引擎?这将使您有任意数量的零,后跟一个正整数,后跟任意数量的零。你可以通过这样做来调整你的建议:^ 0 *[1-9] * 0 *,但是这会给你留下一个正则表达式,它与中间的一个零不匹配:00342010。如果您用\d*或[0-9]*替换结尾0*,那么您应该得到您想要的。@S.C.00100
或001000
无效吗?顺便说一句,你的答案有什么不同?是的,根据我对问题的解释,这两个答案都是有效的。如果这不是我们想要的,那么0+应该在开始时替换0*。