正则表达式,用于确定文本是否不超过n次出现的单词

时间:2012-05-01 04:16:37

标签: java regex

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

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

"\\bWarning:{1000,}+ "

3 个答案:

答案 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++;
}