2010-11-30 80 views
4

我想編寫一個正則表達式,該正則表達式與允許的逗號分隔列表中給出的數值列表匹配。空是不允許的。用逗號分隔的列表中值的範圍的正則表達式

喜歡的東西:1-10,20-56,8,7

到目前爲止,我有(([0-9] +)|([0-9] + - [0-9] + ))* [0-9] +。這可以完成大部分工作,但它只會忽略一個範圍的情況(例如:1-10不會驗證)。

可以省略每個範圍的檢查(例如:可以允許20-10爲有效範圍)。

任何幫助,將不勝感激。

回答

1

什麼你之後任選地跟隨零個或多個一(數量或範圍):逗號加號(數字或範圍):

(?:\d+(?:-\d+)?)(?:,(?:\d+(-\d+)?))* 

它使用\d快捷鍵[0-9]和非捕獲圓括號構造的(?: ...)

這個正則表達式不允許列表中包含任何空格。爲了讓那些插入「可選空間」 \s*每學期之間:

\s*(?:\d+(\s*-\s*\d+)?)\s*(?:,\s*(?:\d+(\s*-\s*\d+)?)\s*)* 
0

比方說你的行話那核心是

([0-9]+.)|([0-9]+-[0-9]+) 

它匹配單個數值或範圍。所以,你需要的是:

(CORE,)*CORE 

而你所擁有的是:

(CORE,)*DIGIT 

不喜歡這一點,你將被罰款:

(([0-9]+.)|([0-9]+-[0-9]+),)*([0-9]+.)|([0-9]+-[0-9]+) 
6

您可以使用正則表達式;

^([0-9]+(-[0-9]+)?)(,([0-9]+(-[0-9]+)?))*$ 

Regex in action

+0

我的版本:^([0-9] +)( - [0-9] +)*(([0-9] +)( - [0 -9] +)*)* $。它或多或少是相同的:) – poh 2010-11-30 04:33:06

0

我想你要找的是:

(CORE)(,\s+CORE)* 

這將允許列表是:

CORE 核,核 CORE,CORE CORE ,CORE,CORE

等。

希望這有助於
大衛

相關問題