1

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

特别是,我希望能够通过并检测内容是否与给定正则表达式匹配以及在何处匹配 XML 元素流的内容。例如,我想从 MediaWiki 元素流的内容中查看 SAX“字符”回调,但要检测匹配 ==([^=\n]+)== 的子字符串的位置。

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

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

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

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

4

2 回答 2

0

也许hitEnd在这种情况下Matcher可能有用:

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

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

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

于 2012-04-09T16:42:40.523 回答
-1

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

于 2012-04-09T14:46:15.770 回答