2

我正在尝试从某些行中匹配完整的单词,想知道如何在正则表达式中使用 OR,如果我只使用一个关键字,它可以正常工作。例子,

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");
        }
    }
4

2 回答 2

9

你要:

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

最初,您的正则表达式是这样评估的:

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

但你想要:

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

这个很酷的工具可以帮助您分析正则表达式并找到像这样的错误。

于 2012-07-11T22:04:52.330 回答
2

管道字符|可以用作 OR 运算符,这在正则表达式中称为交替。

要使其在您的示例中正常工作,您只需围绕交替创建一个组,以确保您仅对您感兴趣的关键字执行 OR,例如:

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

你目前所拥有的将意味着.*\\bKEYWORD1 OR KEYWORD2 OR KEYWORD3\\b.*

于 2012-07-11T22:06:37.203 回答