4位正则表达式,可能以0开头

问题描述 投票:1回答:2
\b(0?[1-9]){4}

我有这个可以找到的正则表达式

1234 

但不是

0123

它找到01234超过4位数

我的正则表达式的哪一部分是错的?

regex nsregularexpression digit qregularexpression
2个回答
4
投票

正则表达式的问题在于你为0匹配指定了?,这意味着零或一个匹配。因此,您可以匹配5位数字符串(和更大的字符串)。

问题是?贡献0或1然后你的1-9测试总是贡献1.你做了4次匹配,所以你可以匹配从4位到8位数字的任何东西。

这是一个更简单的版本,您可以使用https://regexr.com/进行测试。

\b[0-9][1-9]{3}\b

根据需要,这将在第一个位置测试0-9,然后在接下来的3个测试中测试1-9。

示例输出

yes: 1234
yes: 0123
no:  01234
no:  12345
no:  0001
yes: 0125

3
投票

您的量词用于整个组,因此您也可以将01020304与您当前的正则表达式匹配。

在这种情况下,最简单的解决方案似乎是一种替代方案:

\b(?:0[1-9]{3}|[1-9]{4})\b

请注意,这与0中包含3000的数字不匹配。

但是,如果你只是想确保,不要匹配0000,你可以使用前瞻

\b(?!0{4})\d{4}\b
© www.soinside.com 2019 - 2024. All rights reserved.