首页
社区
课程
招聘
[推荐]Aogo 的汇编版通用正则引擎。强悍啊!!
发表于: 2009-3-1 17:26 7773

[推荐]Aogo 的汇编版通用正则引擎。强悍啊!!

2009-3-1 17:26
7773
随便在网上搜索了一些正则表达式,都能正常匹配,太牛了,不得不第一时间抢先发在这!
用汇编写出这样的东西,无语啊。稍稍看了下反汇编的代码,可以确定不是用的别人的库,没有C语言那些优化的东西,应该是纯汇编的编译代码。我是小人。。竟然不相信这件事。。。

======================================================
http://www.aogosoft.com/bbs/upfile/20093110046_RegExp.rar

        正则表达式汇编版
  ==================================
  自主开发的正则表达式引擎库,纯汇编语言编写,支持大部分通用正则引擎标准,通过编码的设定,可支持双字节搜索,性能稳定,速度比其它通用引擎要快(当做不可能是全部任意表达式,但是普遍要快)。提供测试器给大家测试,之后发布正式版本时,将提供引擎库给程序员使用。

  支持的表达式符号如下所示:
  ====================================
  \t 制表符
  \n 换行(根据换行模式分别为0D/0A/0D0A,对应UNIX/MAC/WINDOWS)
  \b 字符首或字符尾
  \B 非字符首与字符尾
  \w 单词
  \W 非单词
  \s 空白,包括空格,制表符, 其它的通用部分引擎还包括 0D/0A
  \S 非空白
  \d 数字
  \D 非数字
  \h 十六进制
  \H 非十六进制
  \l 小写
  \L 非小写
  \u 大写
  \U 非大写
  \x 两个十六进制 指定 ASCII
  \X 4个十六进制 指定 DBCS

  同时,转义符 \b 在字符集 []中,表示退格符(ASCII 08),而\B则不支持! 无明确编码定义的转义符号则不支持-表示范围,如[c-\w],解析为字符c与-以及\w,而不是c-\w!

  ^         搜索开头与行首(多行模式)
  $         搜索结尾与行尾(多行模式)
  []        字符集
  [^]       非字符集
  .         任意字符(单行模式匹配包括换行符)
  *         0或更多
  +         1或更多
  ?         0或1个
  {n,m}     最少n,最多m,支持{n},{n,}
  *?        0或更多(非贪婪)
  +?        1或更多(非贪婪)
  ??        0或1个(非贪婪)
  {n,m}?    最少n,最多m,支持{n},{n,}(非贪婪)
  (exp)     表达式组,自动引用
  (?:exp)   表达式组(不引用)
  (?>exp)   贪婪子表达式(不引用)
  (?=exp)   前向零宽断言匹配(不引用)
  (?!exp)   前向零宽断言非匹配(不引用)
  (?<=exp)  后向零宽断言匹配(不引用,所有限定符为非贪婪模式)
  (?<!exp)  后向零宽断言非匹配(不引用,所有限定符为非贪婪模式)
  (?ism-ism:exp)  参数修改表达式,仅对当前表达式有效

  \0-\9     后向引用匹配

  与现在的功能最多的正则引擎相比,以下表达式功能不支持:
  ====================================
  (这些功能并不全部是标准,只有部分正则引擎全部支持)

  1.(?<x>-<y>exp) 平衡组表达式,比如进行C语言语法识别,可以用<?<if>-<else>exp)来跳过一个完整的if/else/endif分支,自动找到配对的条件结束位置。

  2.(?(exp)yes|no) 断言条件分支,这种表示方式,它的意思是,把(exp)作为条件断言,如果为TRUE,则选择yes分支,否则匹配no分支。

  3.(exp@1) 不支持递归匹配,在当前组中引用自身组,形成递归匹配,如果条件一直满足,很容易成为死循环,这种功能不同于组引用,组引用是引用匹配的结果,而递归引用是引用表达式。

  4.\p(name)exp 不支持组命名,只能使用 0-9 组引用,在替换时可以使用 0-9,查找时只能使用 1-9(参考第3条,不支持递归匹配,则\0永远无效)

  5.(?im-nsx)exp 为表达式后面的部分改变处理选项,这个功能是修改后面所有的匹配设置,不支持,但支持子表达式选项修改 (?im-nsx:exp)。如 \w(?-i:[a-z]),匹配一个单词,然后匹配a-z,但是要区分大小写(?-i:表示去掉忽略大小写设置,反之(?i:exp)则是要忽略大小写)。

  6.++ ?+ {n,m}+ *+ 勉强模式不支持,贪婪与非贪婪模式是标准,但勉强模式是后面引入的概念,用贪婪子表达式 (?>exp) 实际上能组合出相同作用的表达式。

  7.\* 部分转义符不支持,以及部分转义符意义不同,如\r我的正则引擎不支持,因为有选项指定换行是 Unix/MAC/Windows 模式,同时,所有字节都可使用\x**来指定实际编码,如\x0D,\x0A,\x07,另外,还支持\X****来指定双字节范围,部分引擎如.Net相同的转义符是\u****。前者是实际编码,后者是UNICODE。而\u在我的引擎中表示大写字符。

  正则表达式的说明请在网络上搜索,推荐<正则表达式30分钟入门教程>,因测试版本未发布库文件,程序员使用手册暂未提供!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 474
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

受教了
2009-3-1 23:08
0
雪    币: 1145
活跃值: (387)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
强大!
2009-3-2 23:10
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
支持@...正这个表达
2009-3-6 14:44
0
雪    币: 232
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
LZ连Aogo都不知道啊.....
2009-3-6 15:08
0
雪    币: 213
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
就是就是AOGO都不知道啊
2009-3-9 02:46
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=;]...[/QUOTE]
我找到错误了,当行尾$在表达式内的时候,查找的结束位置不能匹配,在"abc"中查找:
\w+($)

总是无法匹配,但是:
\w+$

又可以。不知道为什么!
2009-3-10 15:27
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
8
强憾,我手上的程序正好可以用....
2009-3-10 19:00
0
游客
登录 | 注册 方可回帖
返回
//