否定正则表达式捕获组

时间:2014-11-16 18:49:14

标签: java regex

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

filename:foobar0.2.3-dev.zip

我想要实现的是从每次收到的字符串中获取版本号(0.2.3-dev)而不必每次都使用此格式的文件名,因此它也适用于{{1等等。

我不知道我怎么能这样做,非常感谢任何帮助。

亲切的问候。

@EDIT

在Ben的帮助下(见下面的答案),我想办法完成这项工作。

baz0.2.3-dev.jar

2 个答案:

答案 0 :(得分:1)

您可以尝试匹配" number.number.number-dev"例如以下

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

在行动here

中查看

对于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");
    }

行动here

答案 1 :(得分:0)

这是一种捕获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