以下是我希望匹配的文字:
00000001,00000002,00000003
它适用于((([-1-9]+),)+)?[-1-9]+
。
但它并不匹配-1
。该表达式不得与-2
或除-1
之外的任何其他内容匹配。
答案 0 :(得分:1)
您可以使用
^(?:0*[1-9][0-9]*|-1)(?:,(?:0*[1-9][0-9]*|-1))*$
请参阅regex demo。
模式详情:
^
- 字符串开头(?:0*[1-9][0-9]*|-1)
- 非捕获组匹配...
0*[1-9][0-9]*
- 零或mor 0
个字符,后跟一个非零数字,后跟任意一个或多个数字|
- 或-1
- -1
子字符串(?:,(?:0*[1-9][0-9]*|-1))*
- 一个非捕获组,用*
(0或更多)量词匹配0次或更多次重复:
,
- 逗号(?:0*[1-9][0-9]*|-1)
- 与开头相同的子模式(-1
或非零数字,没有分数)$
- 字符串结束。答案 1 :(得分:0)
[-1-9]+
与您期望匹配的内容不符。它匹配例如:“ - 31-23”,这显然不是数字。
一个简单的正则表达式:
(?:^-1)$|^[0-9]+
将匹配“-1”或任何正整数(包括0001,00000002等)。
此外,根据您使用的语言,使用语言功能来确定数字是“-1”还是任何其他正数会更简单。
答案 2 :(得分:0)
由于你的状态((([-1-9]+),)+)?[-1-9]+
可以正常捕获一个正整数并查看问题的标题,你可以使用这个正则表达式使用alternation来捕获-1或只有正整数,包括{{来自字符串的1}}或0
可以在前面加零。
正整数将在第1组中捕获。
<强>详情
00000
按字面意思匹配-
匹配0或数字2-9,后跟数字的零或多次。请注意,[02-9][0-9]*
不属于character class,否则-
也会匹配。---
或|
零次或多次匹配0*
在第1组中捕获一个可选的连字符,后跟一个或多个数字