我有一个日志文件,我正在尝试检测单词“警告:”的出现次数是否高于某个数字,比如 1000。
我已经尝试了几次类似于以下的尝试,但我没有得到我期望的匹配
"\\bWarning:{1000,}+ "
如果您愿意考虑非 java/regex 解决方案,您可以在 *NIX 中获得行数:
grep "Warning:" YOURFILE.LOG | wc -l
Windows 命令行版本将是:
find /c "Warning:" YOURFILE.log
现在您的 {1000,} 仅匹配 : 字符。此外,这种情况下的“+”是多余的。你希望它匹配“警告”和介于两者之间的东西,所以你必须指定所有这些:
"(?:\\bWarning:.*?){1000,}"
其内容为:“从非单词标记开始,查找字符‘警告:’和零个或多个字符,直到下一次允许的匹配,1000 次或更多次。”
请注意使用非捕获组((?: )
构造)来指定要匹配 N 次的内容。
您还需要打开单行匹配(.
包括\n
)。
我怀疑你让这比它需要的更难。为什么不只是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++;
}