2

いくつかの行の完全な単語を一致させようとしています。正規表現でORを使用する方法を知りたいのですが、キーワードを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");
        }
    }
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 に答える