将正则表达式应用于 SAX 流



有人知道一个好的Java流式正则表达式解析器吗?

特别是,我希望能够通过 BY 观察 XML 元素流的内容,并检测内容是否以及与给定的正则表达式匹配的位置。 例如,我想通过 MediaWiki 元素流的内容观察 SAX"字符"回调,但检测何时出现匹配 ==([^=]+)== 的子字符串。

诀窍是内容以不确定大小的块形式出现,这意味着匹配的子字符串可能会在多个回调中中断。

当然,简单的解决方案是简单地缓冲所有回调,并在长字符串上运行Java的内置正则表达式引擎。不幸的是,这占用了太多内存。

复杂性的下一步是将正则表达式转换为DFA,并检测DFA何时进入"接受"状态。 我想知道是否有人知道是否有一些 Java 库来简化此过程。

我一直在研究Ragel;但这需要在编译时指定DFA。

也许在这种情况下,Matcher的命中结束可能有用:

当此方法返回 true 时,可能会有更多的输入更改上次搜索的结果。

您可以尝试匹配每个块,如果没有匹配但返回 true hitEnd则必须附加下一个块并重试。

如果匹配器以某种方式也返回可能的起始索引,那就太好了,但这似乎是不可能的。

缓冲这些回调,每次关闭标签时检查正则表达式,丢弃缓冲区

最新更新