无法使用分隔符捕获组

时间:2014-11-15 18:04:53

标签: regex

我正在尝试验证输入数据,该数据应采用以下格式

[(aa,11),(bb,22),(cc,33)]

我正在寻找以下条件需要满足

[(aa,11),(bb,22),(cc,33)] -->Valid
[(aa,11)] -->Valid
[(aa,11)(bb,22)] -->Invalid (comma missed inbetween the tuples)
[(aa,11),(bb,22),(cc,33),(dd,44),] -->Invalid (comma at the last tuple)
[,(aa,11)] ->Invalid  (comma before first tuple)

我写了正则表达式,但它不能在所有条件下工作bcoz我做了' 作为可选

^(\[(\([a-z]+,[0-9]+\),?)+\])$

有人可以纠正我的正则表达式吗?

2 个答案:

答案 0 :(得分:3)

您可以为每个新,(aa,11)创建一个新的匹配组,以便您的新正则表达式如下所示:

^(\[(\([a-z]+,[0-9]+\))(,\([a-z]+,[0-9]+\))*\])

在这里,您可以创建一个可以重复0次或更多次的新组。 看看这个通过测试的正则表达式:http://www.regexr.com/39tlg

答案 1 :(得分:1)

您可以使用可选的非捕获组重复该模式"零或更多"次。

^\[\([a-z]+,\d+\)(?:,\([a-z]+,\d+\))*\]$

Live Demo