-
一个用MASM写的正则表达式引擎
此正则表达式引擎属于正统的NFA引擎,基本兼容Perl,简单说一下引擎是怎么实现的:
首先做一个递归下降语法分析,利用栈把正则表达式转换成NFA(以有向图的形式表现),再遍历NFA判断是否能到达完成节点。
实现正则表达式匹配的各种复杂功能的力量来自于回溯,而回溯的基础是栈,回溯能力是通过栈来达成的。
栈中保存了匹配路径中所有的状态,状态回溯就是出栈,状态匹配就是入栈。
除了回溯,一些扩展功能的实现也是通过栈来完成的,比如捕获和零宽断言,都要通过搜索或操纵栈来完成。
转换成NFA再匹配的好处是简化匹配和利于优化和DEBUG:因为不管再复杂的表达式转换成NFA之后只有边和节点组成,边和节点也只有顺序、分支、循环这三种形式组成。
详细原理说明看下面关于实现引擎的文章,第3条是我理解引擎匹配原理的入门参考。
支持GBK和UTF8编码
==参考和学习资料==
关于实现引擎的文章:
1、《Perl语言编程》第五章 书
2、《精通正则表达式》 书
3、构造正则表达式引擎 http://www.cppblog.com/vczh/archive/2008/05/22/50763.html 我的原理学习入门参考
4、NFA引擎匹配原理 http://blog.csdn.net/lxcnn/article/details/4304651
5、英文参考资料 请点击左侧文件开始预览 !预览只提供20%的代码片段,完整代码需下载后查看 加载中 侵权举报
- 2022-05-27 18:36:44下载
- 积分:1
-
基于Java的BP网络数字识别法.rar
基于Java的BP网络数字识别法.rar-Java-based BP Network Digital Identification Act. Rar
- 2022-01-26 03:15:33下载
- 积分:1
-
时域差分法计算一维光子晶体反射率和透射率
时域差分法计算一维光子晶体反射率和透射率。时域差分法是最新研究光子晶体的科学数值方法。使用MATLAB编写了其源码,对于研究光子晶体的人们,有重要参考价值。
- 2022-12-02 07:00:03下载
- 积分:1
-
SVM分类点
对一系列数据点进行分类,并且可视化显示,即单独窗口显示进行分类的点以及所得到的的超平面
- 2022-03-20 18:12:14下载
- 积分:1
-
大家请多指教!!!挺不错的哦!
大家请多指教!!!挺不错的哦!-you please enlighten! ! ! Very good!
- 2022-03-22 11:36:04下载
- 积分:1
-
2阶巴特沃斯滤波器
实用的fortran版2阶巴特沃斯滤波器。
在李建平程序基础上有细微调整。
- 2022-03-09 12:24:15下载
- 积分:1
-
零基础学算法 第二版光盘 源代码
- 2022-08-17 03:16:22下载
- 积分:1
-
高斯投影正反算及相邻带的坐标换算程序
高斯投影坐标正、反算及相邻带的坐标换算MATLAB源代码
- 2022-10-21 04:10:04下载
- 积分:1
-
斯密斯预估器
1、CserialPort实现了简单而强大的多线程串口编程工具,CserialPort类是在Remon Spekreijse设计的CSerialPort类基础上设计的,并增加了对二进制数据传输和块读写方式的支持和其他功能函数;2、实现了Smith预估器与PID控制的结合;
- 2023-01-05 17:00:10下载
- 积分:1
-
poj 1451的代码和方法说明,个人原创
poj 1451的代码和方法说明,个人原创
-the codes and solution for poj 1451
- 2022-03-01 21:47:23下载
- 积分:1