2010-11-30 76 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

等。

希望这有助于
大卫

相关问题