Java 将正则表达式应用于SAX流
有人知道一个好的Java流式正则表达式解析器吗 特别是,我希望能够通过监视XML元素流的内容,并检测内容是否与给定的正则表达式匹配,以及在何处匹配。例如,我希望通过查看MediaWiki元素流内容中的SAX字符回调,但检测匹配==[^=\n]+==的子字符串何时出现 诀窍在于内容以不确定大小的块形式出现,这意味着匹配的子字符串可能会在多个回调中被破坏 当然,简单的解决方案是简单地缓冲所有回调,并在长字符串上运行Java内置的regexp引擎。不幸的是,这占用了太多的内存 复杂性的下一步是将regexp转换为DFA,并检测DFA何时进入接受状态。我想知道是否有人知道是否有一些Java库可以简化这个过程Java 将正则表达式应用于SAX流,java,xml,regex,sax,Java,Xml,Regex,Sax,有人知道一个好的Java流式正则表达式解析器吗 特别是,我希望能够通过监视XML元素流的内容,并检测内容是否与给定的正则表达式匹配,以及在何处匹配。例如,我希望通过查看MediaWiki元素流内容中的SAX字符回调,但检测匹配==[^=\n]+==的子字符串何时出现 诀窍在于内容以不确定大小的块形式出现,这意味着匹配的子字符串可能会在多个回调中被破坏 当然,简单的解决方案是简单地缓冲所有回调,并在长字符串上运行Java内置的regexp引擎。不幸的是,这占用了太多的内存 复杂性的下一步是将reg
我一直在看拉格尔;但这需要在编译时指定DFA。缓冲这些回调,每次关闭标记时检查regexp,丢弃缓冲区在这种情况下,Matcher的可能有用: 当此方法返回true时,可能更多的输入会更改上次搜索的结果 您可以尝试匹配每个区块,如果没有匹配,但hitEnd返回true,则必须追加下一个区块,然后重试
如果匹配器以某种方式也返回了可能的起始索引,那就太好了,但这似乎是不可能的 在您的示例中,这样的匹配子字符串只跨一行,缓冲最后一行或几行有什么问题?我不能依赖于行的长度是否合理。一些数据集被长串的垃圾破坏了。恶意破坏检测应该不太难,但我想我应该花几分钟研究一下这种方法。有些标签包含数百兆字节的数据。