2013-03-15 105 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