 | 下载排行榜 |
|
果不出其然,正则引擎速度比别的引擎快很多,果然是有没考虑周全的地方啊!
正则表达式引擎碰到了一个比较刺手的问题,就是后向引用的问题,因表达式匹配过程中,总是要尝试往前匹配,之后视情况回退(术语那个字打不出来),而在这些检测过程的匹配中,搜索指针会在嵌套中递增,之后返回的,只能是这一层,嵌套里面的组引用,不可能一直去检测它是否存在,现在的问题在于,引用组永远只有一个,就算使用限定符让这个表达式组匹配多次,最终只会是最后一次的结果,所以每次递归检测子表达式时,如何保留上一次的引用,就是个很麻烦的事。
比如: 123ABC (注意有空格) (([A-Z])+|(\d+|\s+))+\w
这个表达式搜索后,只匹配了123ABC,后面两个空格没有匹配,但是问题来了,上面的搜索,结果是,原本引用3 (\d+|\s+) 应该是123,因为后面分支匹配\s+时,最后的条件\w已经无法匹配,但是,分支在循环匹配时,\d+和\s+在同一个引用组里面,当尝试匹配到\s+时,会一直匹配直到碰到最后,因为没有\w,需要进行回退,但是我的代码设计过程中,并没有去记录分支的匹配引用,因为这是很不科学的,会让速度慢上好多,我想这估计就是为什么我的正则比其它通用正则速度快很多的原因,因为精确获得匹配组位置,每次检测都需要进行引用的修改,如果是嵌套的子表达式,还要包括子表达式里面的引用组,这样就让我很不爽了。
精确引用功能,目前也完成了,但是速度比原来慢一倍还要多,尤其引用组很多的情况下,因为引用组是一个结构内存块,搜索过程中要一直重复访问引用数组,开销太大了,还是得想想其它办法,不知道有什么好办法没!
搜了不少资料,写正则引擎的资料太少了,普通的资料我看看英文还行,这种针对性很强的资料,完全看不懂!郁闷,我猜想,是不是没有什么好办法能解决这个问题呢,去掉引用组的代码,我的引擎速度普遍比测试过的表达式快上2倍以上,但又不能肯定,毕竟这是我一个人在乱猜!因为其它的编辑器中正则搜索慢,也有可能是编辑类的内存结构不同而引起的,因为大部分编辑类都是行模式,就是每一行为一块的内存,而MASMPlus为了性能,采用的是整块内存编辑,搜索时不需要判断行的内存边界然后去预读。
嗯,再看看吧。11号的车票,回家过年,就不方便上网了(新家电话都没装)。估计完全的正则引擎得到春节后。到时候让大家多测试测试,写这引擎,最大的感受就是,只要肯下时间和精力,总有办法解决问题的。嘿嘿!
迟来的问候,各位兄弟,新年快乐! |
 |  | 站内更新 软件总数:74 作品总数:49 例子总数:27 文章总数:128 技巧总数:32 |  |
 |  | 论坛更新 论坛总贴:81440 主贴总数:16917 今日贴数:2 今日主贴:2 精华贴子105 |  |
|
※
2009-1-6 6:49:20 | 菜鸟鸿 |
|
|
※
2009-1-6 0:11:30 | twm1354 |
|
|
※
2009-1-5 23:42:15 | _asm |
|
|
※
2009-1-5 22:42:52 | 我爱汇编 |
|
|
※
2009-1-5 22:00:29 | ham |
|
|
※
2009-1-5 21:59:04 | ham |
|
|
※
2009-1-5 17:51:01 | 菜鸟鸿 |
|
|
※
2009-1-5 11:10:28 | wklovebibi |
|
|
※
2009-1-4 18:57:27 | hhh2000 |
|
|
※
2009-1-4 18:48:02 | 催月泪 |
|
|
※
2009-1-4 18:46:23 | 电子管 |
|
|
※
2009-1-4 17:35:05 | zoologist |
|
|
※
2009-1-4 16:31:12 | Pauly |
|
|
※
2009-1-4 14:38:52 | wHt |
|
|
※
2009-1-4 0:06:51 | wklovebibi |
|
|