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