[轮子]一个全新开发的正则引擎

软件和网站开发以及相关技术探讨
回复
fy0
帖子: 190
注册时间: 2011-06-27 0:57

[轮子]一个全新开发的正则引擎

#1

帖子 fy0 » 2012-05-08 18:43

后来重构了整个项目,代码量还是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的。

地址见签名。
上次由 fy0 在 2013-02-16 12:32,总共编辑 2 次。
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: [轮子掌控者]一个全新开发的正则引擎(c99)

#2

帖子 枫叶饭团 » 2012-05-08 19:07

膜拜.bin
fy0
帖子: 190
注册时间: 2011-06-27 0:57

Re: [轮子掌控者]一个全新开发的正则引擎(c99)

#3

帖子 fy0 » 2012-05-18 22:57

啊 小小更新了下,把n天前做的的非贪婪匹配提交上去了。

最近很懒啊……大家能否掺和下搞完了它
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: [轮子掌控者]一个全新开发的正则引擎(c99)

#4

帖子 枫叶饭团 » 2012-05-18 23:06

我表示,最近已经懒到睡觉都不想睡了
fy0
帖子: 190
注册时间: 2011-06-27 0:57

Re: [轮子掌控者]一个全新开发的正则引擎(c99)

#5

帖子 fy0 » 2012-05-24 13:37

枫叶饭团 写了:我表示,最近已经懒到睡觉都不想睡了
-。- 最终还是爬起来干了点活。

昨天跑去添加了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 次。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: [轮子掌控者]一个全新开发的正则引擎(c99)

#6

帖子 eexpress » 2012-05-24 14:56

与python的re单元一致
:em20
● 鸣学
Eastsun
帖子: 389
注册时间: 2010-05-18 14:18

Re: [轮子掌控者]一个全新开发的正则引擎(c99)

#7

帖子 Eastsun » 2012-05-24 15:02

我只是想知道,LZ的引擎比起其它的实现在性能方面做过比较么?
fy0
帖子: 190
注册时间: 2011-06-27 0:57

Re: [轮子掌控者]一个全新开发的正则引擎(c99)

#8

帖子 fy0 » 2012-05-24 16:05

eexpress 写了:
与python的re单元一致
:em20
制作的本意就是在c中能有个轻量级的正则用,因为用py多觉得这个设计不错也够用,就照抄了。
Eastsun 写了:我只是想知道,LZ的引擎比起其它的实现在性能方面做过比较么?
暂时还没 -,-
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: [轮子掌控者]一个全新开发的正则引擎(c99)

#9

帖子 fanhe » 2012-08-13 22:25

google的re2是c++的,用起来还算简单
c写普通应用已经不喜欢用了
头像
phoenixlzx
帖子: 2245
注册时间: 2009-07-29 20:11
系统: Arch Linux
来自: Gensokyo
联系:

Re: [轮子掌控者]一个全新开发的正则引擎(c99)

#11

帖子 phoenixlzx » 2012-08-13 23:10

正则恶心+1... :em04

不过若是写好的正则用起来倒是蛮方便的 :em05
回复