0

我有一个日志文件,我正在尝试检测单词“警告:”的出现次数是否高于某个数字,比如 1000。

我已经尝试了几次类似于以下的尝试,但我没有得到我期望的匹配

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

3 回答 3

2

如果您愿意考虑非 java/regex 解决方案,您可以在 *NIX 中获得行数:

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

Windows 命令行版本将是:

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

现在您的 {1000,} 仅匹配 : 字符。此外,这种情况下的“+”是多余的。你希望它匹配“警告”和介于两者之间的东西,所以你必须指定所有这些:

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

其内容为:“从非单词标记开始,查找字符‘警告:’和零个或多个字符,直到下一次允许的匹配,1000 次或更多次。”

请注意使用非捕获组((?: )构造)来指定要匹配 N 次的内容。

您还需要打开单行匹配(.包括\n)。

于 2012-05-01T04:22:28.793 回答
1

我怀疑你让这比它需要的更难。为什么不只是find()循环调用并记录点击数呢?

Pattern p = Pattern.compile("\\bWarning:")
Matcher m = p.matcher(source);
int hits = 0;
while (m.find())
{
  hits++;
}

我假设整个文档都在一个字符串中。另一种可能性是使用扫描仪打开文件并使用其findWithinHorizon()方法:

while (scanner.findWithinHorizon(p, 0) != null)
{
  hits++;
}
于 2012-05-01T07:24:38.677 回答