2013-03-15 120 views
0

我想写一个java正则表达式从字符串中去掉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,但我不知道如何停止仍然有一个小数点。任何帮助都将非常可观。

回答

0

对于测试情况下,你给,你可以使用这个:(\d+\.\d+).*_(\d+)

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