2012-07-11 58 views
1

我想匹配來自某些行的完整詞,想知道如何使用正則表達式中的或, 如果我只使用一個關鍵字,它工作正常。例如,正則表達式匹配整個詞或運算符

regex = ".*\\b" + "KEYWORD1" + "\\b.*"; 


String regex = ".*\\b" + "KEYWORD1|KEYWORD2|KEYWORD3" + "\\b.*"; 

    for (int i = start; i < end; i++) {   
     if (lines[i].matches(regex)) { 
      System.out.println("Matches"); 
     } 
    } 

回答

6

你想:

String regex = ".*\\b(KEYWORD1|KEYWORD2|KEYWORD3)\\b.*"; 

原來,你的正則表達式是被評價是這樣的:

.*\bKEYWORD1 
| 
KEYWORD2 
| 
KEYWORD3\b.* 

但是你想:

.*\b 
(
    KEYWORD1 
    | 
    KEYWORD2 
    | 
    KEYWORD3 
) 
\b.* 

這個很酷tool可以幫助你分析r egexes並找到像這樣的錯誤。

+0

這就是閃電般的速度反應。我會檢查,謝謝 – FirmView 2012-07-11 22:07:14

2

管道字符|可以用作OR運算符,它在正則表達式中稱爲交替。

爲了得到這個在你的榜樣正常工作,你只需要創建一個圍繞交替的一組,以確保你正在做的或者只在你感興趣的關鍵字,例如:

String regex = ".*\\b(KEYWORD1|KEYWORD2|KEYWORD3)\\b.*"; 

你目前擁有的將意味着.*\\bKEYWORD1 OR KEYWORD2 OR KEYWORD3\\b.*