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

4 digit regex which maybe starts with 0

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

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

1234 

但不是

0123

找到超过4位的01234

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

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

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

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

请注意,这不会匹配内部包含 0 的数字,例如 3000

如果您只是想确定,而不是匹配 0000,您可以改用前瞻

\b(?!0{4})\d{4}\b

您的正则表达式的问题是您为第 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