正则表达式得到正整数和-1

时间:2018-05-25 07:58:54

标签: regex

以下是我希望匹配的文字:

00000001,00000002,00000003

它适用于((([-1-9]+),)+)?[-1-9]+

但它并不匹配-1。该表达式不得与-2或除-1之外的任何其他内容匹配。

3 个答案:

答案 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组中捕获。

-[02-9][0-9]*|0*(-?[0-9]+)

<强>详情

  • 00000按字面意思匹配
  • -匹配0或数字2-9,后跟数字的零或多次。请注意,[02-9][0-9]*不属于character class,否则-也会匹配。
  • ---
  • |零次或多次匹配
  • 0*在第1组中捕获一个可选的连字符,后跟一个或多个数字