2015-11-13 50 views
-1

我想驗證一個字符串,它代表從打印對話框中可知的範圍列表,您可以在其中指明要打印的頁面。例子:正則表達式來匹配範圍和數字列表的混合列表

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

我想什麼,是不「完成」是無效的,如:

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

正如您可以猜到 - 我沒有在它;)

任何幫助非常感謝

+1

你可以添加一個你認爲是無效的字符串的例子嗎? 另外,你嘗試了什麼? – dounyy

+0

我根據您的要求添加了一些無效的示例。 – dmeu

回答

4

您可以嘗試正則表達式(\d+(\-\d+)?(,(?!$))?)+,如:

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

其中:

\d+ 1個或多個位

(\\-\\d+)?之後或-和1個或多個位

(,(?!$))?不與所有上述後跟或不 ''(但不作爲字符串的最後一個位置 - (?!$)是字符串末尾的負向預讀)

+說,以上都必須提交至少有一次

+0

嗨斯坦尼斯拉夫,感謝您的回答和解釋!它似乎工作得很好,除了如下情況:'1-3,9-11'。公平起見,我沒有把它作爲一個可能的例子,但我現在添加它;) – dmeu

+1

@dmeu只是將它改爲'(\ d +(\ - \ d +)?(,(?!$))?) +',它會工作。 – Stanislav

+0

@dmeu更新了答案) – Stanislav