boost pcre Greta RE2 正则表达式性能测试
算法:
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 测试。
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 大多数测试都很优秀(特性上够用)。
注意:
测试方法:
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
posted on 2011-04-18 12:20 JesseFang 阅读(2972) 评论(0) 编辑 收藏 举报