算法:

a depth-first search of the pattern tree: pcre 称其为 NFA ,一条路径,需回溯,反复遍历输入输入字符串。

a breadth-first search of the tree: pcre 称其为 DFA ,Google RE2 称其为 Thompson NFA ,所有路径,不需回溯,输入字符串只需遍历一次。类似 NFA 转 DFA 算法 Powerset construction 的过程。

DFA 不需要回溯,理论性能比 NFA 要强,但缺点是不能实现 back references,这点确实得到了 Google RE2 的印证。但奇怪的是 pcre 文档说自己的 DFA 实现比 NFA 实现要慢。同时 pcre 的 DFA 不支持 capturing parentheses (小括号捕获),导致大多数测试无法进行,故没有做 pcre DFA 测试。

Google 做 RE2 的另一个重要理由是 NFA 可以陷入递归死循环,导致提供服务的服务器被攻击。 当然大多数的正则库,都能限制递归深度或者非递归的内存用量来解决此问题。
测试种类:

GRETA 2.6.4 (递归模式)

GRETA 2.6.4 (非递归)

Boost regex 1.46.1 (递归模式,windows上栈溢出后自动转换为非递归模式)

Boost regex 1.46.1 ( C++ locale同上,但比较字符采用C++ locale)

PCRE 8.37 ( NFA 递归、 JIT,未测试 DFA  )

Boost Xpressive 1.56.1(Dynamic Xpressive)

Google RE2 (DFA类,但相比 PCRE 的 DFA 其支持匹配括号 capturing parentheses,但不支持 back references)

总结起来就是 pcre JIT 当之无愧的王者(性能与特性兼顾),DFA 类的 Google RE2 大多数测试都很优秀(特性上够用)。

注意:

GRETA已经多年没维护过了,VS2008上编译有个小的地方需要修改。可直接在GCC 3.2上编译,但GCC4 系列无法编译通过(理论上是GCC3.4开始就不能编译了,采用新的解析器,所以模板语法上很多处需要修改)
Linux 平台下, posix 库部分测试项,会表现成绩异常优秀(由于 posix extended 正则能力有限),但不能匹配出预期数量的结果,所以屏蔽这些测试项。

测试方法:

Boost库自带的正则表达式性能测试工具(libs\regex\performance)

测试环境:

PC——  Intel Core i5 M560 2.67GHz:

  WinXP i386         VS2003sp1

Server—— Intel Xeon X5560 2.8GHz:

  Windows 2003 i386    VS2003sp1

  RHEL 5.5 x64        GCC 4.1

Server—— Intel(R) Xeon(R) E5405 @ 2.00GHz

  RHEL 6.4 x64        GCC 4.4           boost 1.56

测试结果:

具体内容见附件 regex_performance.zip

转载于:https://www.cnblogs.com/JesseFang/archive/2011/04/18/2019721.html

boost pcre Greta RE2 正则表达式性能测试相关推荐

  1. boost::regex模块部分正则表达式迭代相关的测试程序

    boost::regex模块部分正则表达式迭代相关的测试程序 实现功能 C++实现代码 实现功能 boost::regex模块部分正则表达式迭代相关的测试程序 C++实现代码 #include < ...

  2. boost::regex模块部分正则表达式相关的测试程序

    boost::regex模块部分正则表达式相关的测试程序 实现功能 C++实现代码 实现功能 boost::regex模块部分正则表达式相关的测试程序 C++实现代码 #include <boo ...

  3. re2正则表达式匹配引擎的c接口版本cre2的中文使用手册

    前言 re2 官方地址: https://github.com/google/re2 cre2 官方地址: https://github.com/marcomaggi/cre2 1 基本类型定义 不透 ...

  4. RE2正则表达式引擎资料

    2019独角兽企业重金招聘Python工程师标准>>> 官网 RE2,C++正则表达式库实战 <自动机理论 语言和计算导论> 转载于:https://my.oschina ...

  5. BOOST库学习之正则表达式

    前言 本次笔记记录如下知识点 正则表达式的简介 正则表达式的匹配 正则表达式的查找 正则表达式的替换 正则表达式的迭代 一.正则表达式的简介 1.正则表达式的匹配规则 正则表达式定义了一套复杂的语法规 ...

  6. RE2正则表达式库的Windows移植

    RE2库的Windows移植过程如下: 1.从http://code.google.com/p/re2/downloads/list下载最新RE2库(re2-20130802.tgz). 2.解压到当 ...

  7. Boost学习之正则表达式--regex

    来源:http://blog.chinaunix.net/uid-21222282-id-1829265.html 来源:http://www.cnblogs.com/undermoon/archiv ...

  8. c语言正则表达式库,c语言正则表达式库--PCRE

    很多语言都支持正则表达式,但是c语言自身不支持,可以通过PCRE库使用正则表达式. PCRE提供的几个主要API: pcre_compile 函数原型: pcre *pcre_compile(cons ...

  9. vc 可用的正则表达式库

    vc 可用的正则表达式库 gnuregex,PCRE,greta,boost,CAtlReg 其中 CAtlReg 和greta 是微软的,不过 greta 据说已经多年不维护,不能在最新的编译器中编 ...

最新文章

  1. GANs笔记(1) - 初步了解 GANs
  2. android中ADT和SDK的关系(转)
  3. iOS开发:动态添加按钮
  4. 实现CheckboxGroup的全部选中
  5. tcp 的ack, seq
  6. .NET源码反编译和加密
  7. 理解Prefix.pch文件
  8. WordPress路径相关函数总结
  9. [js] setTimeout的第三个参数有什么用?
  10. C语言实现简单的电子通讯录2
  11. 眼下很多创业者之所以会创业失败
  12. dta乱码_DTA是自动化索引的出色工具
  13. 手把手教你如何导入源码,zookeeper为例
  14. 关键路径 - 数据结构和算法67
  15. python文本文件合并,python将多个文本文件合并为一个文本的代码(便于搜索)
  16. php依赖注入框架pimple中文文档
  17. 常用数据库的种类与特点
  18. 不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接,中断与此服务器或共享资源的所有连接,然后再试一次
  19. 抽象类及抽象方法作用
  20. 智慧医院信息系统集成平台建设方案

热门文章

  1. [网络流24题-7]圆桌问题
  2. LeetCode算法题-Minimum Depth of Binary Tree(Java实现)
  3. 「镁客·请讲」摩簦伞易新宇:对共享雨伞的不同理解,让他们玩法也和他人不同...
  4. 元素失去焦点(隐藏软键盘)
  5. 【基础部分】之apache配置与应用
  6. 变更AD计算机名称和IP地址
  7. ERP项目选型实施注意的几点(二)
  8. 再获“国资”加持,车置宝获南京银行2亿债权融资支持...
  9. CentOS-7.2、7.5模板机制作
  10. python(40):利用utf-8编码判断中文英文字符