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

时间:2015-07-04 13:07:12

标签: regex flex-lexer lexical-analysis digit

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

示例匹配

0
50
798

示例拒绝

01
046
0014
00
0001

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

  

0,50,798
  01,046,601,00,0000

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

运行

4 个答案:

答案 0 :(得分:4)

使用以下正则表达式:

^(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

答案 1 :(得分:1)

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

  1. 匹配单个零
  2. 匹配不以零开头的数字。
  3. 第一种情况很简单:/0/

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

    要获得这两种情况,只需使用条形图或

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

答案 2 :(得分:0)

嗯,为什么不喜欢......

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

答案 3 :(得分:0)

请检查此http://regexr.com/3bb09

https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch06s06.html获取提示 并改进它以否定从0开始的数字。

RE:\b[^0,]*([1-9][0-9]*|0)\b 文字:0,50,798,01,046,601,00,1000 仅匹配0,50和798

由于 Venkat