0

ログファイルがあり、「警告:」という単語の出現回数が特定の数、たとえば1000を超えているかどうかを検出しようとしています。

次のような試みを何度か試しましたが、期待した一致が得られません

"\\bWarning:{1000,}+ "
4

3 に答える 3

2

Java/正規表現以外のソリューションを検討する場合は、次のように *NIX で行数を取得できます。

grep "Warning:" YOURFILE.LOG | wc -l

その Windows コマンド ライン バージョンは次のようになります。

find /c "Warning:" YOURFILE.log
于 2012-05-01T04:32:33.590 に答える
1

必要以上に難しくしていると思います。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++;
}
于 2012-05-01T07:24:38.677 に答える
1

現在、 {1000,} は : 文字のみに一致しています。また、この場合の「+」は不要です。「警告」などと一致させたいので、そのすべてを指定する必要があります。

"(?:\\bWarning:.*?){1000,}"

これは次のように書かれています: 「単語以外のトークンから始めて、文字 '警告:' と、次に許可される一致まで、1000 回以上、0 個以上の何かを見つけます。」

非キャプチャ グループ ((?: )コンストラクト) を使用して、何を N 回照合するかを指定することに注意してください。

また、単一行の一致を有効にする必要があります ( .includesを作成します\n)。

于 2012-05-01T04:22:28.793 に答える