\b(0?[1-9]){4}
我有这个可以找到的正则表达式
1234
但不是
0123
它找到01234超过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
您的量词用于整个组,因此您也可以将01020304
与您当前的正则表达式匹配。
在这种情况下,最简单的解决方案似乎是一种替代方案:
\b(?:0[1-9]{3}|[1-9]{4})\b
请注意,这与0
中包含3000
的数字不匹配。
但是,如果你只是想确保,不要匹配0000
,你可以使用前瞻
\b(?!0{4})\d{4}\b