美文网首页
Hyperscan 5.0.0 新特性

Hyperscan 5.0.0 新特性

作者: ebayboy | 来源:发表于2019-03-28 10:37 被阅读0次

Hyperscan 5.0.0 版本已于2018年7月9日在Github ( https://github.com/intel/hyperscan ) 上发布。

这一新版本主要涉及3个改进:

加入Hyperscan/libpcre混合库,支持所有PCRE语法特性;

加入“逻辑组合”新特性,满足对多规则进行自定义的逻辑组合匹配的需求;

加入Hyperscan工具对Windows操作系统的支持(包括win32/64平台);

混合库Chimera

o 特性概要:

该库有效整合Hyperscan与libpcre,旨在支持PCRE完整语法的同时,亦能获益于Hyperscan的高性能优势。对于任何覆盖PCRE所有语法的目标规则集,Chimera对其同时进行Hyperscan与PCRE编译,得到混合database,运行时根据Hyperscan本身对具体规则语法的支持程度,来决定是否用Hyperscan直接进行匹配验证,亦或先扮演过滤角色,由PCRE进行最终匹配验证。

o 应用要点:

Chimera库提供与原生Hyperscan库类似的编译时期和运行时期API。Chimera被设计为和PCRE有相同的匹配行为,包括了贪婪和非贪婪,以及捕获机制等等。同时,Chimera和PCRE一样会同时返回匹配的起始位置和结束位置。与Hyperscan返回所有的匹配位置不同,Chimera只返回无重叠区域的匹配区间。例如,规则 /foofoo/ 在语料 “foofoofoofoo” 中返回的匹配区间仅为(0, 6) 和 (6, 12)。值得注意的是,Chimera对正则语法的支持虽然更加完善,但其匹配性能相较纯Hyperscan而言仍会有所下降,我们建议只在需要对PCRE语法进行完全支持的情况下使用Chimera,而对于Hyperscan本身足够应付的场合仍沿用Hyperscan库以获得高性能表现。

规则“逻辑组合”

o 特性概要:

该特性提供了新的规则使用场景:对于一组规则来说,用户可能关心部分规则的匹配,也可能需要部分规则不被匹配,单个规则有自己的逻辑语义,而整组规则的逻辑组合后的整体匹配行为,才是用户所需要的结果。我们为规则的逻辑语义定义了3种逻辑操作符,即常见的 “NOT”,“AND”,“OR”。规则的逻辑组合用中缀表示法来书写,它包含操作符,操作子,和小括号。操作子是规则ID,定义在别处,操作符为!(NOT),&(AND),|(OR)。例如 ((301 OR 302) AND 303) AND (304 OR NOT 305) 可表示为((301 | 302) & 303) & (304 | !305)。操作符优先级为! > & > |。

o 应用要点:

逻辑组合表达式的匹配仍然沿用Hyperscan的编译和运行时API,只是需要对其设置新的标志位HS_FLAG_COMBINATION来确指。同时,逻辑组合表达式和其内部操作子对应的规则必须同时进行编译。在执行逻辑组合的匹配过程时,每个内部操作子对应规则的匹配位置仍然会被正常报告,在这些位置中,一旦逻辑组合的布尔值为TRUE,组合本身也会在当前位置报告成功匹配对于只关心逻辑组合结果的情况,标志位HS_FLAG_QUITE可用来取消逻辑组合内部子规则的匹配报告。

Windows支持:

Hyperscan库,包括基本测试工具hsbench,hscheck,hscollider以及hsdump目前可以在Windows8或Windows更新版本上编译和运行,编译工具为Intel C++ Compiler或者Visual Studio 2017。需要注意的是,为了在Windows上正常支持Ragel,用户可能需要借助Cygwin来进行源码构建。

优化了编译阶段无向图的实现,使得图拷贝的开销减少,提升了规则的编译效率。

Bugfix:

o Issue #86: 为安装的PCRE包提供hscollider支持。

github:https://github.com/intel/hyperscan/releases/tag/v5.0.0

安装指南:https://intel.github.io/hyperscan/dev-reference/getting_started.html 

转自:https://mp.weixin.qq.com/s/QOctINBbeskccQn7NMOUlA

!符号代表当前位置没发生匹配

关于逻辑表达式的距离: "101 & 102 & !105"

对于有非逻辑符的表达式, 如果101和102都匹配了, 在当前位置105没匹配中, 则

"101 & 102 & !105" 表达式会计算为true, on_match会返回逻辑表达式的id。

相关文章

网友评论

      本文标题:Hyperscan 5.0.0 新特性

      本文链接:https://www.haomeiwen.com/subject/uppfbqtx.html