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

Regex 如何使正则表达式只接受不以零或仅以零开头的数字?,regex,flex-lexer,lexical-analysis,digit,Regex,Flex Lexer,Lexical Analysis,Digit,我正在尝试创建一个正则表达式来接受不以零或单个零位开头的数字 示例匹配 0 50 798 示例拒绝 01 046 0014 00 0001 我尝试使用/[0]|[1-9][0-9]*/匹配以下文本中的值: 0,50798 01,046,0014,00,0001 此尝试可在使用以下正则表达式时运行: ^(0|[1-9]\d*)$ 见演示 此正则表达式包含两部分,0或[1-9]\d*,这是一个不以零开头的数字 请注意,如果要在其他文本中匹配数字,则需要单词边界,而不是起始和结束锚定: \b(0

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

示例匹配

0
50
798
示例拒绝

01
046
0014
00
0001
我尝试使用
/[0]|[1-9][0-9]*/
匹配以下文本中的值:

0,50798
01,046,0014,00,0001

此尝试可在使用以下正则表达式时运行:

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

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

请注意,如果要在其他文本中匹配数字,则需要单词边界,而不是起始和结束锚定:

\b(0|[1-9]\d*)\b
请参见演示使用以下正则表达式:

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

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

请注意,如果要在其他文本中匹配数字,则需要单词边界,而不是起始和结束锚定:

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

请参见演示

嗯,为什么不使用类似

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

嗯,为什么不做点像

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

您的正则表达式中似乎有两个案例:

  • 匹配一个零
  • 匹配不以零开头的数字
  • 第一种情况很简单:
    /0/

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

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

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

    您的正则表达式中似乎有两个案例:

  • 匹配一个零
  • 匹配不以零开头的数字
  • 第一种情况很简单:
    /0/

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

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

    /0|[1-9]\d*/
    
    请检查这个

    从他那里得到小费 并将其改进为以0开头的数字为负数

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

    谢谢 文卡特请检查一下

    从他那里得到小费 并将其改进为以0开头的数字为负数

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

    谢谢
    Venkat

    (?:\d+)
    可以写成
    \d*
    这与OP显示的逗号分隔值不匹配。@匿名OP的预期结果中没有逗号分隔@匿名如果信息不在问题中,它就不存在。如果OP有限制,他们需要提供该细节。对于被问到的问题,这个答案是正确的。@Anonymous现在我明白了,尽管问题中没有提到它!我加了一些解释<代码>(?:\d+)可以写成
    \d*
    这与OP显示的逗号分隔值不匹配。@匿名OP的预期结果中没有逗号分隔@匿名如果信息不在问题中,它就不存在。如果OP有限制,他们需要提供该细节。对于被问到的问题,这个答案是正确的。@Anonymous现在我明白了,尽管问题中没有提到它!我加了一些解释!你应该在问题本身中包含正则表达式语言和测试用例。感谢更新我的帖子。你应该在问题本身中包含正则表达式语言和测试用例。感谢更新我的帖子。