2012-06-30 32 views
0

我要在以下與字符串第一匹配模式之後的Java正則表達式返回

第一「從」後提取詞「抗CD24自Chemicon,和抗CD48聖誕老人」

現在,我使用 -

「從\ S +([^ \ S] +)」

但它同時給出'Chemicon'和'Santa'結果,而不是'Chemicon'結果。

+4

然後,只需使用第一個結果? –

+0

如何提取出第一個結果?我正在使用'if(m.find())',它提供了兩個結果而不是第一個結果。 – user1419742

回答

0

您可以在Method對象上使用lookingAt方法。它在找到第一場比賽後停止。

matches功能,不像find功能lookingAt必須從一開始匹配,所以我們必須使用正則表達式".*?from\\s+(\\w+)",它說:匹配任何內容,直到第一個「從」,那麼一個或多個空格字符,然後是下一個「單詞」。如果您只希望按字母順序來匹配「from」後的單詞,請使用".*?from\\s+([a-zA-Z])"。開頭處的".*?"表示非貪婪匹配。如果您只使用".*"它將匹配最後的「from」,而不是第一個。

這裏的代碼,我測試過:

String s = "anti-CD24 from Chemicon, and anti-CD48 from Santa"; 
    Matcher m = Pattern.compile(".*?from\\s+(\\w+)").matcher(s); 
    if (m.lookingAt()) { 
    System.out.println(m.group(1)); 
    } 

打印出:

 
Chemicon 
+0

thanx,它甚至可以在使用'。*?'而不是''*''之後使用'find'。''' – user1419742

+0

是的,好的捕獲 - 也適用於此案件。因爲我們使用任何角色的非貪婪匹配,使得在這種情況下查找工作。 – quux00

1

也許你可以做這樣的事情:

Pattern p = Pattern.compile("from\\s+([^\\s]+)"); 
    Matcher m = p.matcher("anti-CD24 from Chemicon, and anti-CD48 from Santa"); 
    if (m.find()) { 
     System.out.println(m.group(1)); 
    } 

這將花費只是第一個。也許你可以使用這個正則表達式來避免第一個匹配的逗號(Chemicon,):from\\s+([a-zA-Z]+)

+0

天哪!在我的Eclipse中實現它之後會輸入相同的代碼.. +1因爲比我更快lol – verisimilitude

+0

thanx,但是我使用的是來自\\ s +([^ \\ s])的'anti-CD24。* +)',在這種情況下,它實際上是匹配最後一個,即。 '聖誕老人',但我想提取'Chemicon', – user1419742