2012-07-11 123 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.*