繁体   English   中英

否定正则表达式捕获组

[英]Negating a Regex capturing group

我正在开发一个程序,该程序可以在线检查是否有更新。 我用于更新检查的站点为我提供了一个纯文本响应,如下所示:

filename:foobar0.2.3-dev.zip

我想要实现的是从我收到的String中获取版本号( 0.2.3-dev ),而不必每次都使用这种格式的文件名,因此它也适用于baz0.2.3-dev.jar之类的。

我不知道该怎么做,不胜感激。

亲切的问候。

@编辑

在Ben的帮助下(请参见下面的答案),我找到了一种方法来完成此任务。

String input = "filename:foobar0.2.3-dev.zip";
Pattern p = Pattern.compile(".*?((\\d+(?:\\.\\d+)*).+)\\..*");
Matcher m = p.matcher(input);

if(m.matches()) {
  System.out.println(m.group(1)); // This should output 0.2.3-dev
}

您可以尝试将“ number.number.number-dev”与以下内容匹配

  /(\d+\.\d+\.\d+-dev)/

这里看到它的作用

对于Java,请导入java.util.regex。*并尝试:

    Pattern p = Pattern.compile(".*?(\\d+\\.\\d+\\.\\d+-dev).*");
    Matcher m = p.matcher("filename:foobar0.2.3-dev.zip");
    if (m.matches()) {
        System.out.println(m.group(1));
    }
    else {
        System.out.println("Pattern does not match");
    }

并在这里采取行动

这是一种捕获1-4版本号的方法。

 # "(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:\\.(\\d+))?)?)?-dev"


 ( \d+ )                    # (1)
 (?:
      \.
      ( \d+ )               # (2)
      (?:
           \.
           ( \d+ )          # (3)
           (?:
                \.
                ( \d+ )     # (4)
           )?
      )?
 )?
 -dev

产量

 **  Grp 0 -  ( pos 15 , len 9 ) 
0.2.3-dev  
 **  Grp 1 -  ( pos 15 , len 1 ) 
0  
 **  Grp 2 -  ( pos 17 , len 1 ) 
2  
 **  Grp 3 -  ( pos 19 , len 1 ) 
3  
 **  Grp 4 -  NULL 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM