ログファイルがあり、「警告:」という単語の出現回数が特定の数、たとえば1000を超えているかどうかを検出しようとしています。
次のような試みを何度か試しましたが、期待した一致が得られません
"\\bWarning:{1000,}+ "
Java/正規表現以外のソリューションを検討する場合は、次のように *NIX で行数を取得できます。
grep "Warning:" YOURFILE.LOG | wc -l
その Windows コマンド ライン バージョンは次のようになります。
find /c "Warning:" YOURFILE.log
必要以上に難しくしていると思います。find()
ループを呼び出して、ヒット数を集計してみませんか?
Pattern p = Pattern.compile("\\bWarning:")
Matcher m = p.matcher(source);
int hits = 0;
while (m.find())
{
hits++;
}
ドキュメント全体が文字列になっていると仮定しています。もう 1 つの可能性は、スキャナーでファイルを開き、そのfindWithinHorizon()
メソッドを使用することです。
while (scanner.findWithinHorizon(p, 0) != null)
{
hits++;
}
現在、 {1000,} は : 文字のみに一致しています。また、この場合の「+」は不要です。「警告」などと一致させたいので、そのすべてを指定する必要があります。
"(?:\\bWarning:.*?){1000,}"
これは次のように書かれています: 「単語以外のトークンから始めて、文字 '警告:' と、次に許可される一致まで、1000 回以上、0 個以上の何かを見つけます。」
非キャプチャ グループ ((?: )
コンストラクト) を使用して、何を N 回照合するかを指定することに注意してください。
また、単一行の一致を有効にする必要があります ( .
includesを作成します\n
)。