Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将正则表达式应用于SAX流_Java_Xml_Regex_Sax - Fatal编程技术网

Java 将正则表达式应用于SAX流

Java 将正则表达式应用于SAX流,java,xml,regex,sax,Java,Xml,Regex,Sax,有人知道一个好的Java流式正则表达式解析器吗 特别是,我希望能够通过监视XML元素流的内容,并检测内容是否与给定的正则表达式匹配,以及在何处匹配。例如,我希望通过查看MediaWiki元素流内容中的SAX字符回调,但检测匹配==[^=\n]+==的子字符串何时出现 诀窍在于内容以不确定大小的块形式出现,这意味着匹配的子字符串可能会在多个回调中被破坏 当然,简单的解决方案是简单地缓冲所有回调,并在长字符串上运行Java内置的regexp引擎。不幸的是,这占用了太多的内存 复杂性的下一步是将reg

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

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

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

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

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


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

缓冲这些回调,每次关闭标记时检查regexp,丢弃缓冲区

在这种情况下,Matcher的可能有用:

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

您可以尝试匹配每个区块,如果没有匹配,但hitEnd返回true,则必须追加下一个区块,然后重试


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

在您的示例中,这样的匹配子字符串只跨一行,缓冲最后一行或几行有什么问题?我不能依赖于行的长度是否合理。一些数据集被长串的垃圾破坏了。恶意破坏检测应该不太难,但我想我应该花几分钟研究一下这种方法。有些标签包含数百兆字节的数据。