2016-09-21 52 views
1

我想獲得突出顯示部分從以下文字:正則表達式來獲得內部文本

Linux版本的49年3月10日 - g5796782(d00903065 @ Ubuntu的)

我一直在嘗試與模式和來自Java庫的Matcher,但一直未能成功。謝謝!

編輯

這裏是我的代碼,我已經嘗試了一些答案,但對於一些說理它不會有任何的比賽:

String s = "Linux version 3.10.49-g5796782 ([email protected])"; Pattern pattern = Pattern.compile("'^\\D+([-.\\w]+)'"); Matcher matcher = pattern.matcher(s); if (matcher.find()) { s = matcher.group(1); } else { s = "no match"; }

+0

你能提供更多的字符串嗎?還是唯一的字符串? – SomeDude

+0

我的不好,字符串在開始時總是會有Linux版本,所以我想要在版本之後和空白區域之前獲得字母數字代碼。 – Tuco

+0

你怎麼得到這樣的字符串?也許值得改變打印linux版本的命令行。例如'uname -r'返回你感興趣的東西。 –

回答

1

你有沒有嘗試過這樣的事情?

(?<=version\s)(\S+) 

這裏有一個working example

+0

我沒有得到任何匹配。 'Pattern pattern = Pattern.compile(「'(?<= version \\ s)(\\ S +)'」); Matcher matcher = pattern.matcher(string);' – Tuco

+0

如果使用'find(..)'函數運行它,該怎麼辦? @Tuco [見這裏](http://www.regexplanet.com/advanced/java/index.html) – wpcarro

1

雖然這不是一個reg EXP,若能保證Linux version後出現,你可能只是做:

str.split(" ")[2] 
1

你可以使用:

^\D+([-.\w]+) 

a demo on regex101.com
記住要加倍逃避反斜槓Java,所以就變成:

^\\D+([-.\\w]+) 

,並使用第一組。

0

因爲你提到的弦總是Linux version開始,我做出了正則表達式更加具體和Java代碼將是:

public static void main (String[] args) throws java.lang.Exception 
{ 
    String pattern = "Linux version\\s*(\\d+.\\d+.\\d+-\\w+)\\s+.*"; 
    String input = "Linux version 3.10.49-g5796782 ([email protected])"; 

    Pattern p = Pattern.compile(pattern); 
    Matcher m = p.matcher(input); 
    if (m.find()) 
    { 
     System.out.println("Linux version is : " + m.group(1)); 
    } 
} 
0

補丁,很多人打我這個衝頭,但因爲我使正則表達式已經:

import java.util.regex.Pattern; 
import java.util.regex.Matcher; 

class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
    String s = "Linux version 3.10.49-g5796782 ([email protected])"; 
    Pattern pattern = Pattern.compile("\\w+\\s+\\w+\\s+([a-z-A-Z0-9.-]+)\\s+(?:[()[email protected])]+)"); 
    Matcher matcher = pattern.matcher(s); 
    if (matcher.find()) { 
     s = matcher.group(1); 
    } else { 
     s = "no match"; 
    } 
    System.out.println(s); 
    } 
} 

我匹配整個字符串,這似乎有點過分了,現在我回去讀了你需要的東西。如果前兩個單詞中的任何一個都有數字,這將會處理,這似乎不太合理。