作者:hhh2000 此贴贴于2013-10-9 16:39:13,已被阅读328次/回复1 
【正则表达式引擎】[迟来的加温]等aogo的正则表达式引擎源码等不来,试着自己写了一个,用的是比较一般的方法,感兴趣的看看吧
断断续续写了2年多,早2个月就想发了。不过不想只发代码,还想写点思路和简单的教程,没想到还挺麻烦。

不过通过理顺思路,发现一些bug和结构不合理的地方,修改完了想了想干脆又加了平衡组功能,功能基本算比较全了。

做了一些优化之后,重新找了测试用例做了测试,基本上达到实用的要求。

其实1年前我写的一些小程序就用上这引擎了,不过当时并不完善,没好意思拿出来。


==引擎一些说明==

引擎源文件都在RegExp文件夹,其它的都是测试和调试用的,如果引擎源文件有引用其他文件的函数,注释掉就行,使用时只需要包含RegExp.asm即可。

debug文件夹里的是masm32里带的debug工具,给没有的同学准备的,调试时打开DBGWIN.exe就行了。

这个引擎用的是NFA回溯的方法来匹配的,perl .NET PCRE 等网上常见引擎的都是用这种方法实现的。

为了解决一些病态表达式回溯次数指数增长的问题,通过空间换时间的策略,使用CACHE缓存引擎匹配状态,加速匹配;不过大部分表达式不存在这个问题,可以通过设置标志不使用CACHE节省内存。

用宏包装一下,可以用perl的写法写表达式,但由于masm对宏的限制,有一些表达式写不了(单个<(>)'"等),但大部分是可以用的。

支持GBK和UTF8编码(编译时确定)。

汇编嘛速度慢了说不过去,优化后速度也算比较快。

其他具体内容看readme,想了解引擎怎么实现的除了看代码,也可以看看里面的参考和学习资料和map.jpg。

问题:

引擎支持的内容比较多,结构比较复杂,容易出bug,欢迎大家报告,回帖或发邮件都行。

为了简化编程,有些结构使用固定大小的内存,有冗余,可以优化减少。

有些极端情况占用内存比较多(主要是栈)。

针对一些常用表达式还有优化余地。

因为写的时间比较长,不同时期代码风格不大一样,还有就是英文比较烂,有些名字起的词不达意。

发现几个小问题,更新了文件,请已下载的同学重新下一次,这里的文件这是最后一次变动,以后再更新的话,会开新帖或提供其他网络地址。
下载...
下载...
下载...


此贴的回复贴(直接):
很好很强大,收藏了..比 aogo 的那个版本好.他那个有 bug.一直没更新..192 我爱汇编 2013-10-9 18:37:56 0 正常