0

我正在尝试编写一个 java 正则表达式来从我从 java -version 命令获得的字符串中去除 java 版本。

如果字符串是"java version 1.7.0_17"我需要分别提取 1.7 和 17 。假设如果字符串是"java version 1.06_18"我需要提取 1.06 和 18。第一个字符串应该只到第一个小数点。我尝试使用以下正则表达式,

Pattern p = Pattern.compile(".*\"(.+)_(.+)\"");

但它只提取 1.7.0 和 17,但我不确定如何停止仍然保留一位小数。任何帮助都会非常显着。

4

2 回答 2

0

重新阅读您的问题,我的旧答案并未涵盖在第一个小数点处停止。这应该可以解决您的问题:

Pattern p = Pattern.compile(".*?(\\d+[.]\\d+).*?_(\\d+)");

测试:

 String input = "java version 1.7.0_17";
 Pattern pattern = Pattern.compile(".*?(\\d+[.]\\d+).*?_(\\d+)");
 Matcher matcher = pattern.matcher(input);
 if (matcher.find()) {
     String version = matcher.group(1); // 1.7
     String update  = matcher.group(2); // 17
}

旧版:

而不是找到数字,我会摆脱其余的:

String string  = "java version 1.7.0_17";
String[] parts = string.split("[\\p{Alpha}\\s_]+", -1);
String version = parts[1]; // 1.7.0
String update  = parts[2]; // 17
于 2013-03-15T14:27:32.187 回答
0

对于您提供的测试用例,您可以使用:(\d+\.\d+).*_(\d+)

于 2013-03-15T14:09:15.877 回答