【发布时间】:2010-12-30 03:44:40
【问题描述】:
是否有任何(免费的)Java 正则表达式引擎,可以将正则表达式编译为 DFA,并在匹配 DFA 的同时进行组捕获?
我找到了 dk.brics.automaton 和 jrexx,它们都可以编译为 DFA,但似乎都无法进行组捕获。虽然我发现的其他引擎似乎可以编译为 NFA。
【问题讨论】:
-
用于性能优化。
-
我之所以问,是因为通常这些性能优势源于 DFA 引擎无法回溯。如果是这种情况,也许您可以使用原子分组/占有量词来实现相同的目的。也许您可以发布一些您想要实现的示例?
-
一些示例怎么样,我们可以看看您的问题是否可以以不同的方式解决 - 因为似乎没有人知道具有组捕获的 Java DFA 正则表达式引擎......如果它真的是 一个问题而不是过早的优化:)
-
感谢您的关注,但确实没有需要以不同方式解决的问题。我只是想看看基于 DFA 的引擎会对我的应用程序产生什么性能影响。
-
如果 NFA 不使用回溯,则 DFA 和 NFA 引擎之间不应该有任何明显的区别。如果你找到一个好的线性时空 NFA 引擎,你应该使用它。在没有组的情况下,即使是简单的实现仍然是恒定空间/线性时间。