我很困惑(我很接近,但无法克服这个最后的障碍。
我需要从一系列的git分支中提取分支类型和"倡议",这些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规则。
谢谢!
you 超级接近!尝试将?
附加到您的第二个匹配组,例如:
(release)/(w*?)-?(?=v?d+.d+.d*)
请参阅REGEXR中的此功能。
您最好将可选属性应用于整个w+-
模式:
(release)/(?:(w+)-)?v?d+(?:.d+)*
看来您也不需要LookAhead。