我想出了这个正则表达式:
(?:[0-9]{4}-([0-9]{4}|[?]))+
本文:
1993-2000,2004-?
要在block = [0-9]{4}-([0-9]{4}|[?])
我有各种变化:
1993-? 1993-2000 1993-2000,2004-? 1993-2000,2004-2010
等等。
我的正则表达式捕获块[1993-2000]
和[2004-?]
,但不捕获逗号。
我觉得难以宣布逗号应该是第二次,第三次等事件的强制性。
所以不应该允许的是:
1993-2000, 1993-20002007-? ?-2000
可能允许这样做0:1993-2000,2004,2007,2010-?
有人可以帮助我最后了解有关第二次和后续事件的条件逗号吗?
我发现这个正则表达式我改编了一下:
^([0-9]{4}(-([0-9]{4}|[?]))?)(,([0-9]{4}(-([0-9]{4}|[?]))?))*$
似乎可以做到这一点,但这是最好的版本吗?
答案 0 :(得分:2)
你的正则表达式(最后一个)看起来很好。过度拒绝或过度接受应该没有问题。但是,有两个不必要的分组:
^[0-9]{4}(-([0-9]{4}|[?]))?(,[0-9]{4}(-([0-9]{4}|[?]))?)*$
您可以将所有组都设为非捕获,因为您正在验证并且不会捕获任何文本:
^[0-9]{4}(?:-(?:[0-9]{4}|[?]))?(?:,[0-9]{4}(?:-(?:[0-9]{4}|[?]))?)*$
可以使用 \d
代替[0-9]
,但我认为明确声明它并没有坏处。