有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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规则

谢谢大家!


共 (2) 个答案

  1. # 1 楼答案

    你是超级接近!尝试将?附加到第二个匹配组,如下所示:

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

    See this working in regexr

  2. # 2 楼答案

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

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

    看来你也不需要向前看