[英]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.