如何使用正则表达式忽略以0(零)开头的数字?

时间:2017-04-12 14:21:07

标签: regex

我试图匹配数字,但我需要遵循一些规则 数字可能(或可能不)以符号[+ - ]开头 如果数字以0开头,则不能跟随任何数字 但如果它本身为0,则应匹配。

我想出了以下正则表达式:

[+-]*[1-9]\d*|[+-]*[0](?!\w)

但它并不完全符合我的需要:

01 (matches 1, should match nothing)
9,000 (matches 9 and last 0, should match 9 only)
+0152 (matches 152, should match nothing)
-1200 (matches -1200, working as intended)
+0 (matches +0, working as intended)

Live demostration

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

[+-]?\b(?:0|[1-9][0-9]*)\b

RegEx Demo

RegEx分手:

  • [+-]? - 首先匹配+-
  • \b - 断言字边界
  • (?: - 启动非捕获组
    • 0 - 匹配单个0
    • | - 或
    • [1-9][0-9]* - 匹配1-9后跟任意数字0次或以上
  • ) - 结束非捕获组
  • \b - 断言字边界

答案 1 :(得分:1)

尝试以下正则表达式:

^[+-]?[1-9]\d*|[+-]*[0](?!\w)$
  • *之后您不需要[+-],因为它会匹配许多符号,请改用?
  • 并且您需要在^$之间包装正则表达式,以便它匹配整个匹配的正则表达式和giva想要的匹配项。

修改

如果您处理的是单词而不是行,则需要使用单词边界\b而不是^$