我正在寻找一种对数据流进行操作的正则表达式匹配的实现——即,它有一个 API,允许用户一次传入一个字符并在字符流上找到匹配项时报告到目前为止看到。只需要非常基本(经典)的正则表达式,因此基于 DFA/NFA 的实现似乎非常适合该问题。
基于可以在单次线性扫描中使用 DFA/NFA 进行正则表达式匹配的事实,似乎应该可以实现流式处理。
要求:
在执行匹配之前,库不应尝试等到完整的字符串被读取。我真正拥有的数据是流式传输的;没有办法知道有多少数据会到达,不可能向前或向后搜索。
为几个特殊情况实现特定的流匹配不是一种选择,因为我事先不知道用户可能想要寻找什么模式。
语言:可从 C/C++ 使用
出于好奇,我的用例如下:我有一个在完整系统模拟器内拦截内存写入的系统,我想有一种方法来识别与正则表达式匹配的内存写入(例如,可以使用它来找到系统中将 URL 写入内存的点)。
我已经找到:
Code Guru - 使用 .NET Framework 构建正则表达式流搜索
但是所有这些都试图先将流转换为字符串,然后再使用常用的正则表达式库。
我的另一个想法是修改RE2 库,但根据作者的说法,它是围绕整个字符串同时在内存中的假设构建的。
如果没有可用的东西,那么我可以开始重新发明这个轮子以满足我自己的需求的不愉快的道路,但如果我可以避免它,我真的宁愿不这样做。任何帮助将不胜感激!