正则表达式匹配范围和数字列表的混合列表

时间:2015-11-13 12:38:51

标签: java regex

我正在尝试验证表示范围列表的字符串,如打印对话框中所示,您可以在其中指明要打印的页面。例子:

  • 1
  • 1-10
  • 1,20
  • 1-5,10
  • 1-3,9-11

我想任何不是"完成"无效,例如:

  • 1 -
  • 1,
  • ,3
  • 1-4,
  • 1,2,4 -

你可以猜到 - 我失败了;)

非常感谢任何帮助

1 个答案:

答案 0 :(得分:4)

您可以尝试使用正则表达式(\d+(\-\d+)?(,(?!$))?)+,例如:

String str = "1-1,12";
System.out.println(str.matches("(\\d+(\\-\\d+)?(,(?!$))?)+"));

其中:

\d+ 1位或更多位

(\\-\\d+)?跟随或不跟-和1位或更多位

(,(?!$))?并且所有上述内容都遵循或不是','(但不是字符串的最后一个位置 - (?!$)是字符串结尾的负面预测)

+说,以上所有内容必须至少出现一次