Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于匹配非零、零填充整数的正则表达式_Regex - Fatal编程技术网

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

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到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*[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*。