我正在寻找一个对数据流进行操作的正则表达式匹配的实现 – 也就是说,它有一个API,允许用户一次传入一个字符并报告何时在字符流上找到匹配项到目前为止看到了只需要非常基本的(经典)正则表达式,因此基于DFA / NFA的实现似乎非常适合该问题.
基于在单个线性扫描中使用DFA / NFA进行正则表达式匹配的事实,似乎应该可以实现流式实现.
要求:
>在执行匹配之前,库不应该等到读完整个字符串.我的数据确实是流媒体;没有办法知道有多少数据会到达,无法向前或向后搜索.
>为一些特殊情况实现特定的流匹配不是一种选择,因为我事先并不知道用户可能想要查找哪些模式.
>语言:可从C/C++使用
对于好奇,我的用例如下:我有一个系统拦截完整系统仿真器内的内存写入,我想有一种方法来识别与正则表达式匹配的内存写入(例如,可以使用它来找到系统中将URL写入内存的点.
我已经找到:
Applying a regular expression to a Java I/O Stream
Code Guru – Building a Regular Expression Stream Search with the .NET Framework
但所有这些尝试首先将流转换为字符串,然后使用库存正则表达式库.
我的另一个想法是修改RE2 library,但according to the author它的设计围绕着整个字符串同时在内存中的假设.
如果没有什么可用,那么我可以开始重新发明这个轮子的不愉快的道路,以满足我自己的需要,但我真的不愿意,如果我可以避免它.任何帮助将不胜感激!
我正是你想要的:
https://github.com/agentzh/sregex
http://agentzh.org/misc/slides/yapc-na-2013-sregex.pdf
http://agentzh.org/misc/slides/yapc-na-2013-sregex.pdf
如果你知道javascript(或想要一个javascript版本),我有一个练习,可以让你轻松地使用现有的RE实现:https://github.com/dhruvbird/regexp-js