我想编写一个匹配数字值列表的正则表达式,以逗号分隔列表给出,允许范围。不允许空。
类似于:1-10,20-56,8,7
到目前为止,我有(([0-9] +)|([0-9] + - [0-9] +),)* [0-9] +。这完成了大部分工作,除了它仅错过一个范围的情况(例如:1-10不会验证)。
可以省略对每个范围的检查(例如:允许20-10作为有效范围)。
任何帮助都将不胜感激。
答案 0 :(得分:7)
答案 1 :(得分:1)
你所追求的是一个(数字或范围)可选地后跟零或更多:逗号加(数字或范围):
(?:\d+(?:-\d+)?)(?:,(?:\d+(-\d+)?))*
这使用[0-9]的\d
快捷方式和(?: ... )
非捕获括号构造。
此正则表达式不允许列表中包含任何空格。要允许这些,请在每个术语之间插入“可选空格”\s*
:
\s*(?:\d+(\s*-\s*\d+)?)\s*(?:,\s*(?:\d+(\s*-\s*\d+)?)\s*)*
答案 2 :(得分:0)
让我们说你的模式的核心是
([0-9]+.)|([0-9]+-[0-9]+)
匹配单个数值或范围。所以,你需要的是:
(CORE,)*CORE
你拥有的是:
(CORE,)*DIGIT
这样做,你会没事的:
(([0-9]+.)|([0-9]+-[0-9]+),)*([0-9]+.)|([0-9]+-[0-9]+)
答案 3 :(得分:0)
我认为你在寻找的是:
(CORE)(,\s+CORE)*
这将允许列表:
CORE 核心,核心 核心,核心 核心,核心,核心
等等。
希望这有帮助,
大卫