java正则表达式生成一个不正确的结果
我被一个特殊的正则表达式难住了(我非常接近,但还没能克服最后一个障碍)
我需要从名称稍有变化的一系列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规则
谢谢大家!
# 1 楼答案
你是超级接近!尝试将
?
附加到第二个匹配组,如下所示:(release)\/(\w*?)-?(?=v?\d+\.\d+\.\d*)
See this working in regexr
# 2 楼答案
您最好将可选属性应用于整个
\w+-
模式:看来你也不需要向前看