可能以 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
\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