我正在尝试编写regex来获取版本细节。好像我在正则表达式中遗漏了什么。谢谢你的帮助。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class VersionValidator {
public static void main(String[] args) {
// This should print the "3.0.0.10240"
System.out.println(getVersion("3.0.0.10240-8423651"));
// This should print the "3.0.0.10240"
System.out.println(getVersion("3.0.0.10240"));
// This should print the "3.0.0"
System.out.println(getVersion("3.0.0-8423651"));
}
/**
*
* 3.0.0.10240-8423651 -> 3.0.0.10240
*
* 3.0.0.10240 -> 3.0.0.10240
*
* 3.0.0-8423651 -> 3.0.0
*
*/
public static String getVersion(String version) {
Pattern vp = Pattern.compile("(\\d\\.\\d\\.\\d)(\\.\\d+)?(-\\d+)?");
Matcher vm = vp.matcher(version);
if (vm.matches()) {
return vm.group(1);
}
return null;
}
}
2条答案
按热度按时间kr98yfug1#
在我看来,你只是在追求眼前的一切——如果它存在的话。
即
nkoocmlb2#
您需要的正则表达式是
(?<![^\d])\b(?:\d[\d.]*)
检查这个演示和解释。正则表达式的解释:
消极落后
(?<![^\d])
\b
用于单词边界非捕获组
(?:\d[\d.]*)
检查java.util.regex.Pattern
了解更多关于这些模式的信息。您还可以查看oracle的正则表达式教程。除了正则表达式之外,代码中的另一个问题是使用
Matcher#matches
而不是Matcher#find
.输出: