我有一些大的文本文件,我将进行连续匹配(只是捕获,而不是替换).我认为将整个文件保存在内存中并不是一个好主意,而是使用a Reader.
我对输入的了解是,如果匹配,它不会超过5行.所以我的想法是有一些缓冲区只保留这5行,或者左右,进行第一次搜索,然后继续.但它必须"知道"正则表达式匹配结束的位置才能实现.例如,如果匹配在第2行结束,它应该从这里开始下一次搜索.是否有可能以有效的方式做这样的事情?
我正在寻找一个对数据流进行操作的正则表达式匹配的实现 - 也就是说,它有一个API,允许用户一次传入一个字符并报告何时在字符流上找到匹配项到目前为止看到了 只需要非常基本的(经典的)正则表达式,因此基于DFA/NFA的实现似乎非常适合于该问题.
基于在单个线性扫描中使用DFA/NFA进行正则表达式匹配的事实,似乎应该可以实现流式实现.
要求:
图书馆应不尝试等到满弦一直在进行比赛之前被读取.我的数据确实是流媒体; 没有办法知道有多少数据会到达,无法向前或向后搜索.
为一些特殊情况实现特定的流匹配不是一种选择,因为我事先并不知道用户可能想要查找哪些模式.
语言:可从C/C++中使用
对于好奇,我的用例如下:我有一个系统拦截整个系统模拟器中的内存写入,我想有一种方法来识别与正则表达式匹配的内存写入(例如,可以使用它来找到系统中将URL写入内存的点.
我已经找到:
Code Guru - 使用.NET Framework构建正则表达式流搜索
但所有这些尝试首先将流转换为字符串,然后使用库存正则表达式库.
我的另一个想法是修改RE2库,但根据作者的说法,它的构建围绕着整个字符串同时在内存中的假设.
如果没有什么可用,那么我可以开始重新发明这个轮子的不愉快的道路,以满足我自己的需要,但我真的不愿意,如果我可以避免它.任何帮助将不胜感激!