我想编写一个正则表达式,该正则表达式与允许的逗号分隔列表中给出的数值列表匹配。空是不允许的。用逗号分隔的列表中值的范围的正则表达式
喜欢的东西:1-10,20-56,8,7
到目前为止,我有(([0-9] +)|([0-9] + - [0-9] + ))* [0-9] +。这可以完成大部分工作,但它只会忽略一个范围的情况(例如:1-10不会验证)。
可以省略每个范围的检查(例如:可以允许20-10为有效范围)。
任何帮助,将不胜感激。
我想编写一个正则表达式,该正则表达式与允许的逗号分隔列表中给出的数值列表匹配。空是不允许的。用逗号分隔的列表中值的范围的正则表达式
喜欢的东西:1-10,20-56,8,7
到目前为止,我有(([0-9] +)|([0-9] + - [0-9] + ))* [0-9] +。这可以完成大部分工作,但它只会忽略一个范围的情况(例如:1-10不会验证)。
可以省略每个范围的检查(例如:可以允许20-10为有效范围)。
任何帮助,将不胜感激。
什么你之后任选地跟随零个或多个一(数量或范围):逗号加号(数字或范围):
(?:\d+(?:-\d+)?)(?:,(?:\d+(-\d+)?))*
它使用\d
快捷键[0-9]和非捕获圆括号构造的(?: ...)
。
这个正则表达式不允许列表中包含任何空格。为了让那些插入“可选空间” \s*
每学期之间:
\s*(?:\d+(\s*-\s*\d+)?)\s*(?:,\s*(?:\d+(\s*-\s*\d+)?)\s*)*
比方说你的行话那核心是
([0-9]+.)|([0-9]+-[0-9]+)
它匹配单个数值或范围。所以,你需要的是:
(CORE,)*CORE
而你所拥有的是:
(CORE,)*DIGIT
不喜欢这一点,你将被罚款:
(([0-9]+.)|([0-9]+-[0-9]+),)*([0-9]+.)|([0-9]+-[0-9]+)
我想你要找的是:
(CORE)(,\s+CORE)*
这将允许列表是:
CORE 核,核 CORE,CORE CORE ,CORE,CORE
等。
希望这有助于
大卫
我的版本:^([0-9] +)( - [0-9] +)*(([0-9] +)( - [0 -9] +)*)* $。它或多或少是相同的:) – poh 2010-11-30 04:33:06