![0?wx_fmt=gif](https://img-blog.csdnimg.cn/img_convert/0531b5fb96736edd168e1ff614440056.gif)
点击蓝字关注DPDK开源社区
![0?wx_fmt=jpeg](https://img-blog.csdnimg.cn/img_convert/539c18bb110fe22aa53d92adb08bbfa6.png)
Hyperscan作为高性能的正则表达式匹配库,使用者通常乐意将其与传统的正则表达式匹配库进行比较。“为什么要用Hyperscan?”“使用Hyperscan对我有怎样的好处?”本文以一款广泛使用的传统的正则表达式匹配库PCRE为例,说明Hyperscan与PCRE的差异与优势。
PCRE简介
PCRE是Perl Compatible Regular Expressions的简称,是一款十分流行的用C语言编写的正则表达式匹配库,其灵感来源于Perl语言中的正则表达式功能,其语法比POSIX和其他许多正则表达式库更强大更灵活。
PCRE与Hyperscan的功能对比
PCRE只支持块模式编译和匹配,而Hyperscan不仅支持块模式,还支持流模式。流模式在真实的网络应用场景中更加实用和灵活。
PCRE只支持单条正则表达式的编译和匹配,而Hyperscan可支持多条正则表达式的编译和匹配。在实际应用中经常会遇到多条正则规则的场景,对此Hyperscan可以做到一次编译和一次匹配即完成所有任务,非常高效。
从PCRE到Hyperscan的接口替换
PCRE与Hyperscan的常用接口类似,也分为编译期和运行期。
编译期接口替换:
在使用PCRE的产品中,通常用下面的接口对每一条正则规则分别进行编译:
#include <pcre.h> pcre *pcre_compile2(const char *pattern, int options, int *errorcodeptr, const char **errptr, int *erroffset, const unsigned char *tableptr);
若要替换为H