多个捕获组 - 全部是可选的

时间:2013-05-20 17:05:10

标签: regex optional-parameters regex-group

我知道这个(或类似的)被问过一百次 - 但我现在真的需要帮助:D 正则表达式应匹配的字符串。

注意:n的范围为INTEGER_MIN - INTEGER_MAX

{number}
{number(1-n)}
{number(1-n,-n-n)}
{number(1-n,-n-n,0-n)}

如果模式匹配,则应该产生3个单独的捕获组,结果如此。 所有组都应该是可选的 - 因此,如果请求例如Java,则返回null。

1: 1-n
2: -n-n
3: 0-n

我尝试了什么:

\{number(?:\(([1-9])(?:(?:,)([0-9])){0,2}\))?\}

这显然不对,只包含2组(m.groupCount()

1 个答案:

答案 0 :(得分:2)

好的,根据我的推断,我会这样做:

\{number(?:\((\-?\d+)(?:\,(\-?\d+))?(?:\,(\-?\d+))?\))?\}

然后对捕获的组执行操作以验证整数的范围,例如......

[伪代码因为我不知道你使用的语言]

captured integers = "capture1", "capture2", "capture3"
if{("capture1" < "capture2" && "capture1" > "capture3") ||
   ("capture1" > "capture2" && "capture1" < "capture3")} {

    Do something

} else {

    Do something else; like reject or throw error

}