如何使正则表达式只接受不是以零或零开头的数字?

how to make a regular expressions to accept only digits not started with zero or zero only?

我正在尝试创建一个正则表达式来接受不以零或单个零数字开头的数字。

匹配示例

0
50
798

示例拒绝

01
046
0014
00
0001

我的尝试是使用 /[0]|[1-9][0-9]*/ 来匹配以下文本中的值:

0, 50, 798
01, 046, 0014, 00, 0001

此尝试可以 运行 在 http://regexr.com/3bb00

使用以下正则表达式:

^(0|[1-9]\d*)$

查看演示 https://regex101.com/r/zT8uI2/2

此正则表达式包含 2 个部分,0[1-9]\d*,这是一个不以零开头的数字。

请注意,如果您想在其他文本中匹配您的数字,您需要一个单词边界而不是开始和结束锚点:

\b(0|[1-9]\d*)\b

观看演示 ​​https://regex101.com/r/zT8uI2/3

嗯,为什么不像..

if(input[0] == '0' && input.size() > 1) // reject
else //accept

您的正则表达式中似乎有两种情况:

  1. 匹配单个零
  2. 匹配不以零开头的数字。

第一种情况很简单:/0/

第二种情况也很简单/[1-9]\d*/[1-9] 匹配非 0 的数字。那么,我们可以有 0 个或更多数字。

要获得这两种情况,只需使用一个条来执行或

/0|[1-9]\d*/

请检查这个http://regexr.com/3bb09

https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch06s06.html那里得到小费 并改进它以否定以 0.

开头的数字

回复:\b[^0,]*([1-9][0-9]*|0)\b 文本:0、50、798、01、046、0014、00、0001 仅匹配 0、50 和 798

谢谢 文卡特