我试图匹配数字,但我需要遵循一些规则 数字可能(或可能不)以符号[+ - ]开头 如果数字以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)
答案 0 :(得分:2)
您可以使用此正则表达式:
[+-]?\b(?:0|[1-9][0-9]*)\b
RegEx分手:
[+-]?
- 首先匹配+
或-
\b
- 断言字边界(?:
- 启动非捕获组
0
- 匹配单个0
|
- 或[1-9][0-9]*
- 匹配1-9
后跟任意数字0次或以上)
- 结束非捕获组\b
- 断言字边界答案 1 :(得分:1)
尝试以下正则表达式:
^[+-]?[1-9]\d*|[+-]*[0](?!\w)$
*
之后您不需要[+-]
,因为它会匹配许多符号,请改用?
。^
和$
之间包装正则表达式,以便它匹配整个匹配的正则表达式和giva想要的匹配项。修改强>
如果您处理的是单词而不是行,则需要使用单词边界\b
而不是^
和$
。