正则表达式产生一个不正确的结果

时间:2017-09-05 18:15:00

标签: java regex ant

我对一个特定的正则表达式感到难过(我非常接近,但还没能克服这最后一道障碍。

我需要从一系列名称略有变化的git分支中提取分支类型和“主动性”。分支类型进入组1,主动进入组2.版本以“v”开头或者根本没有。

所需的输入/输出是:

branchname          | group 1 | group 2
release/v1.2.3      | release | ""      
release/1.2.3       | release | ""
release/foo-v1.2.3  | release | foo
release/foo-1.2.3   | release | foo

我目前的正则表达式是:(release)\/(\w*)-?(?=v?\d+\.\d+\.\d*)

这会产生以下输入/输出:

branchname          | group 1 | group 2
release/v1.2.3      | release | "v"      <--- Problem!
release/1.2.3       | release | ""
release/foo-v1.2.3  | release | foo
release/foo-1.2.3   | release | foo

我的问题是我只有v1.2.3的情况。如果我可以提供帮助,我不想回过头来更改分支名称(由于很久以前的决定,我们有很多名称为release/vX.Y.Z的)。

我在Linux系统上使用Ant来实现这个正则表达式,所以我需要遵循Java规则。

谢谢!

2 个答案:

答案 0 :(得分:0)

非常接近!尝试将?附加到您的第二个匹配组,如下所示:

(release)\/(\w*?)-?(?=v?\d+\.\d+\.\d*)

See this working in regexr

答案 1 :(得分:0)

您最好将可选属性应用于整个\w+-模式:

(release)\/(?:(\w+)-)?v?\d+(?:\.\d+)*

看来你也不需要前瞻。