匹配非零、零填充整数的正则表达式

6

我需要帮助,匹配一个有前导零且不全是零的整数。它可以有零到 n 个前导零。目前我有:

^[0-9]{0,}[1-9]{1}$"

但是,由于最后一位是零,这种方法无法匹配类似000860的内容。我感觉这应该很简单,但我不会。非常感谢您的任何帮助。
编辑:有几个人问这是哪个引擎/语言。我认为正则表达式是标准化的,所以应该没关系。但它是.NET。

为什么不在 $ 前面加上 [0-9]{0,}(或 [0-9]*)呢?(顺便说一句:你也可以省略 {1},因为它是隐含的)。 - Wrikken
1
@Wrikken -- 因为这样 000000 就能工作了。 - rory.ap
不行,因为你仍然需要 [1-9] 这个必需项。所以,非零是必要的。 - Wrikken
啊...你说得对。那个可以。 - rory.ap
下面的其他答案对于正则表达式引擎来说更有效率 ;) - Wrikken
5个回答

5
为什么不使用这个:
^0*[1-9][0-9]*$

顺便提一下,您忘了指定正在使用的正则表达式引擎。但是上面的模式在几乎任何正则表达式引擎中都能工作。

@S.C. 00100或者001000不是有效的吗?顺便问一下,和你的答案有什么区别? - hek2mgl
是的,根据我的理解,这两个都是有效的。如果不是想要的,那么在开头应该用0+替换0*。 - S.C.
@hek2mgl -- 是的,00100001000都是有效的。 - rory.ap
哪个更高效? - rory.ap
@hek2mgl -- 是的,我现在明白了。 - rory.ap
显示剩余10条评论

4

只需尝试以下正则表达式:

^0*[1-9][0-9]*$

3
这个正则表达式是用来匹配数字的,可以匹配正整数。它会忽略数字前面的所有零,并确保数字没有前导零。

1
你想要捕获860吗?
"000860".match(/^0*([1-9][0-9]*)$/)[1]

谢谢您的回答,但是能否再解释一下会更好。 - rory.ap
这些括号完全没有用处。此外,您对使用的语言进行了假设,没有提供任何解释,甚至没有提供真正的正则表达式,而是将一个常量字符串与正则表达式匹配,并返回第二个匹配项,这将引发索引超出范围异常(或类似异常)-1。 - Vogel612
正则表达式实际上是可用的。但是!.NET将正则表达式与字符串匹配:new Regex("/^0*[1-9][0-9]*$/").Matches("000860"); 因此是正确的。顺便说一句,这会返回一个类型为“Match”的结果。我的观点仍然成立,你的答案应该被踩。 - Vogel612

0

这是我的看法:

0+[1-9]+[0-9]{0,}

它至少捕获一个零(如果可能没有前导零,则在第一个0后附加?而不是+),至少一个非零数字,然后任意数量的零和其他数字。

如果您想捕获没有零的数字:

0+([1-9]+[0-9]{0,})

这只是将前导零后面的部分放在一个捕获组中。

在此处尝试使用它

成功解析所有这些:

000860
000860123
000800
000810
0008

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接