基于DFA的Java正则表达式引擎与Capture

时间:2009-12-26 18:21:56

标签: java regex dfa

是否有Java的任何(免费)正则表达式引擎,可以将正则表达式编译为DFA,并在匹配DFA时进行组捕获?

我找到了dk.brics.automaton和jrexx,它们都编译成DFA,但似乎都无法进行群组捕获。虽然我发现的其他引擎似乎编译为NFA。

5 个答案:

答案 0 :(得分:3)

试试这个(可能不是DFA但比java.util快)http://jregex.sourceforge.net/gstarted-advanced.html#ngroups,或者这个:http://userguide.icu-project.org

根据该测试:http://tusker.org/regex/regex_benchmark.html,两者都很快(我们都知道基准测试仅测试基准测试的创建者想要测试的内容)。

当我需要非常快速的DFA正则表达式时,我已经产生了一个使用grep的过程;-)(对于一个6GB的日志文件,它将我的时间从10分钟减少到几秒钟)。

答案 1 :(得分:2)

我最近写了一篇:tree-regex

答案 2 :(得分:0)

对于C,有TRE和Google的RE2个库。 TRE使用DFA,RE2使用NFA(据我所知),两者都可以进行子组匹配。但我没有看到这样的Java库。

答案 3 :(得分:-2)

您可以尝试使用Pat正则表达式库@ http://www.javaregex.com/

答案 4 :(得分:-2)

dk.brics.automaton是DFA似乎确实捕获组。我希望这个问题在这个问题的两年内是新的。查看类AutomatonMatcher。

http://www.brics.dk/automaton/doc/dk/brics/automaton/AutomatonMatcher.html#group(int