当字符串不匹配时,为什么java-grok会返回上次成功匹配?

时间:2014-06-06 07:07:59

标签: java regex grok

https://github.com/thekrakken/java-grok

我正在使用这个Grok API for Java。代码如下:

    Grok grok = Grok.EMPTY;

    // add a pattern to grok
    grok.addPatternFromFile("pat.txt");

    // compile and add semantic
    grok.compile("%{NUMBER:hits} %{USER:word}");

            String str = "234 wdfd\n";
    Match m = grok.match(str);
    m.captures();

    // Print
    System.out.println(m.toJson());


    grok = Grok.EMPTY;
    str = "ssdfsdf\n";
    Match m2 = grok.match(str);
    m2.captures();

    System.out.println(m2.toJson());

该计划的输出是:

            {"hits":234,"word":"wdfd"}
            {"hits":234,"word":"wdfd"}

我清空了Grok实例,我使用了一个单独的“m2”匹配变量,但程序仍然返回上一次成功匹配而不是NULL或一个错误,可以通知我匹配失败。我如何知道比赛何时失败?

1 个答案:

答案 0 :(得分:0)

这实际上是一个小错误(由于poc),我解决了这个问题。

现在未拼锁的行将返回空。

示例:

Grok grok = Grok.create("pat.txt");
// compile and add semantic
grok.compile("%{NUMBER:hits} %{USER:word}");

String str = "234 wdfd\n";
Match m = grok.match(str);
m.captures();

// Print
System.out.println(m.toJson());


// Here you dont need to create a new instance of grok [grok = Grok.EMPTY;]
str = "ssdfsdf\n";
// here you can reuse the matcher if you want.
Match m2 = grok.match(str);
m2.captures();

System.out.println(m2.toJson());

现在该程序的输出是:

{"hits":234,"word":"wdfd"}
{}

希望得到帮助