将正则表达式应用于SAX流

时间:2012-04-09 14:20:48

标签: java xml regex sax

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

在这种情况下,Matcher的{​​{3}}可能有用:

  

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

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

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

答案 1 :(得分:-1)

缓冲那些回调,每次关闭一个标签时检查regexp,丢弃缓冲区