[轮子]一个全新开发的正则引擎
-
- 帖子: 190
- 注册时间: 2011-06-27 0:57
[轮子]一个全新开发的正则引擎
后来重构了整个项目,代码量还是1100行左右(去掉debug部分),新版兼容c89。
新的特性如下,保证能用:
tinyre ver 0.8.1
A tiny regex engine.
小型正则引擎,语法与python的sre近似,当前仅支持匹配(match)和替换(sub)。
支持 : . ? * + | ^ $ () [] 分组 非贪婪匹配
不支持 : {}
PS: 在支持的语法中,能过python的test部分所有的match测试。sub则比较残缺。
地址如下:
https://github.com/fy0/tinyre
==================================================
这是老黄历,别看了,这版本有严重BUG:
因为不知道pcre为毛需要那么多代码,所以我就自己实现了一个正则引擎。
默默的开发了一个月,开始阶段废弃了四个设计重写了至少六次,
所幸随着第七原型被设计出来稳定下来了。
我想这个设计应该是全新的,既没有图也没有树,
核心数据结构也仅仅只有一个,而且还非常简单。
今天正好满月,同时也完成了否定匹配的部分,
我想无论是DFA该有的还是NFA该有的这货都算合格了,仅剩搞定非贪婪匹配之后,就只是添砖加瓦的水平了。
嗯,还有测试。
当前版本的代码量大概是1100行,不过其实在300行的时候整个设计已经定型。
匹配方面力求与python的re单元一致。等到差不多可以完全替代的时候我会弄个Wrapper的。
地址见签名。
新的特性如下,保证能用:
tinyre ver 0.8.1
A tiny regex engine.
小型正则引擎,语法与python的sre近似,当前仅支持匹配(match)和替换(sub)。
支持 : . ? * + | ^ $ () [] 分组 非贪婪匹配
不支持 : {}
PS: 在支持的语法中,能过python的test部分所有的match测试。sub则比较残缺。
地址如下:
https://github.com/fy0/tinyre
==================================================
这是老黄历,别看了,这版本有严重BUG:
因为不知道pcre为毛需要那么多代码,所以我就自己实现了一个正则引擎。
默默的开发了一个月,开始阶段废弃了四个设计重写了至少六次,
所幸随着第七原型被设计出来稳定下来了。
我想这个设计应该是全新的,既没有图也没有树,
核心数据结构也仅仅只有一个,而且还非常简单。
今天正好满月,同时也完成了否定匹配的部分,
我想无论是DFA该有的还是NFA该有的这货都算合格了,仅剩搞定非贪婪匹配之后,就只是添砖加瓦的水平了。
嗯,还有测试。
当前版本的代码量大概是1100行,不过其实在300行的时候整个设计已经定型。
匹配方面力求与python的re单元一致。等到差不多可以完全替代的时候我会弄个Wrapper的。
地址见签名。
上次由 fy0 在 2013-02-16 12:32,总共编辑 2 次。
我的github: https://github.com/fy0
- 枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
- 联系:
Re: [轮子掌控者]一个全新开发的正则引擎(c99)
膜拜.bin
-
- 帖子: 190
- 注册时间: 2011-06-27 0:57
Re: [轮子掌控者]一个全新开发的正则引擎(c99)
啊 小小更新了下,把n天前做的的非贪婪匹配提交上去了。
最近很懒啊……大家能否掺和下搞完了它
最近很懒啊……大家能否掺和下搞完了它
我的github: https://github.com/fy0
- 枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
- 联系:
Re: [轮子掌控者]一个全新开发的正则引擎(c99)
我表示,最近已经懒到睡觉都不想睡了
-
- 帖子: 190
- 注册时间: 2011-06-27 0:57
Re: [轮子掌控者]一个全新开发的正则引擎(c99)
-。- 最终还是爬起来干了点活。枫叶饭团 写了:我表示,最近已经懒到睡觉都不想睡了
昨天跑去添加了py的绑定,现在这个程序可以被用在python中了……
> 现在的问题就是组机制还有点小故障:
> (.)*b 这种表达式匹配ab之后组内的东西不正常。
-> 已经修复
再缝缝补补,就算0.7.5版本就算完成了。
import re
s = "a" * 29
re.match(r'a?'*29 + 'a'*29,s)
上面举的那种代码在匹配的时候会占用大量的时间,
目前有了一个补正方案,等做出来应该就是0.8或者1.0了吧……真舍不得0.7.x这个版本号
上次由 fy0 在 2012-05-24 19:39,总共编辑 2 次。
我的github: https://github.com/fy0
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 389
- 注册时间: 2010-05-18 14:18
Re: [轮子掌控者]一个全新开发的正则引擎(c99)
我只是想知道,LZ的引擎比起其它的实现在性能方面做过比较么?
-
- 帖子: 190
- 注册时间: 2011-06-27 0:57
Re: [轮子掌控者]一个全新开发的正则引擎(c99)
制作的本意就是在c中能有个轻量级的正则用,因为用py多觉得这个设计不错也够用,就照抄了。eexpress 写了:与python的re单元一致
暂时还没 -,-Eastsun 写了:我只是想知道,LZ的引擎比起其它的实现在性能方面做过比较么?
我的github: https://github.com/fy0
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: [轮子掌控者]一个全新开发的正则引擎(c99)
google的re2是c++的,用起来还算简单
c写普通应用已经不喜欢用了
c写普通应用已经不喜欢用了
- zkwlx
- 帖子: 988
- 注册时间: 2009-10-09 12:54
- 系统: debian
- 来自: 北京某胡同
- phoenixlzx
- 帖子: 2245
- 注册时间: 2009-07-29 20:11
- 系统: Arch Linux
- 来自: Gensokyo
- 联系: