Hyperscan 5.0.0 版本已于2018年7月9日在Github (?https://github.com/intel/hyperscan?) 上發(fā)布汰扭。
這一新版本主要涉及3個(gè)改進(jìn):
加入Hyperscan/libpcre混合庫天揖,支持所有PCRE語法特性遭庶;
加入“邏輯組合”新特性只泼,滿足對(duì)多規(guī)則進(jìn)行自定義的邏輯組合匹配的需求业岁;
加入Hyperscan工具對(duì)Windows操作系統(tǒng)的支持(包括win32/64平臺(tái))充蓝;
該庫有效整合Hyperscan與libpcre娩贷,旨在支持PCRE完整語法的同時(shí),亦能獲益于Hyperscan的高性能優(yōu)勢(shì)碱茁。對(duì)于任何覆蓋PCRE所有語法的目標(biāo)規(guī)則集裸卫,Chimera對(duì)其同時(shí)進(jìn)行Hyperscan與PCRE編譯,得到混合database纽竣,運(yùn)行時(shí)根據(jù)Hyperscan本身對(duì)具體規(guī)則語法的支持程度墓贿,來決定是否用Hyperscan直接進(jìn)行匹配驗(yàn)證茧泪,亦或先扮演過濾角色,由PCRE進(jìn)行最終匹配驗(yàn)證聋袋。
Chimera庫提供與原生Hyperscan庫類似的編譯時(shí)期和運(yùn)行時(shí)期API队伟。Chimera被設(shè)計(jì)為和PCRE有相同的匹配行為,包括了貪婪和非貪婪舱馅,以及捕獲機(jī)制等等缰泡。同時(shí),Chimera和PCRE一樣會(huì)同時(shí)返回匹配的起始位置和結(jié)束位置代嗤。與Hyperscan返回所有的匹配位置不同棘钞,Chimera只返回?zé)o重疊區(qū)域的匹配區(qū)間。例如干毅,規(guī)則 /foofoo/ 在語料 “foofoofoofoo” 中返回的匹配區(qū)間僅為(0, 6) 和 (6, 12)宜猜。值得注意的是,Chimera對(duì)正則語法的支持雖然更加完善硝逢,但其匹配性能相較純Hyperscan而言仍會(huì)有所下降姨拥,我們建議只在需要對(duì)PCRE語法進(jìn)行完全支持的情況下使用Chimera,而對(duì)于Hyperscan本身足夠應(yīng)付的場(chǎng)合仍沿用Hyperscan庫以獲得高性能表現(xiàn)渠鸽。
該特性提供了新的規(guī)則使用場(chǎng)景:對(duì)于一組規(guī)則來說叫乌,用戶可能關(guān)心部分規(guī)則的匹配,也可能需要部分規(guī)則不被匹配徽缚,單個(gè)規(guī)則有自己的邏輯語義憨奸,而整組規(guī)則的邏輯組合后的整體匹配行為,才是用戶所需要的結(jié)果凿试。我們?yōu)橐?guī)則的邏輯語義定義了3種邏輯操作符排宰,即常見的 “NOT”,“AND”那婉,“OR”板甘。規(guī)則的邏輯組合用中綴表示法來書寫,它包含操作符详炬,操作子盐类,和小括號(hào)。操作子是規(guī)則ID呛谜,定義在別處在跳,操作符為!(NOT),&(AND)呻率,|(OR)。例如 ((301 OR 302) AND 303) AND (304 OR NOT 305) 可表示為((301 | 302) & 303) & (304 | !305)呻引。操作符優(yōu)先級(jí)為! > & > |礼仗。
邏輯組合表達(dá)式的匹配仍然沿用Hyperscan的編譯和運(yùn)行時(shí)API,只是需要對(duì)其設(shè)置新的標(biāo)志位HS_FLAG_COMBINATION來確指。同時(shí)元践,邏輯組合表達(dá)式和其內(nèi)部操作子對(duì)應(yīng)的規(guī)則必須同時(shí)進(jìn)行編譯韭脊。在執(zhí)行邏輯組合的匹配過程時(shí),每個(gè)內(nèi)部操作子對(duì)應(yīng)規(guī)則的匹配位置仍然會(huì)被正常報(bào)告单旁,在這些位置中沪羔,一旦邏輯組合的布爾值為TRUE,組合本身也會(huì)在當(dāng)前位置報(bào)告成功匹配象浑。對(duì)于只關(guān)心邏輯組合結(jié)果的情況蔫饰,標(biāo)志位HS_FLAG_QUITE可用來取消邏輯組合內(nèi)部子規(guī)則的匹配報(bào)告。
Hyperscan庫愉豺,包括基本測(cè)試工具h(yuǎn)sbench篓吁,hscheck,hscollider以及hsdump目前可以在Windows8或Windows更新版本上編譯和運(yùn)行蚪拦,編譯工具為Intel C++ Compiler或者Visual Studio 2017杖剪。需要注意的是,為了在Windows上正常支持Ragel驰贷,用戶可能需要借助Cygwin來進(jìn)行源碼構(gòu)建盛嘿。
優(yōu)化了編譯階段無向圖的實(shí)現(xiàn),使得圖拷貝的開銷減少括袒,提升了規(guī)則的編譯效率次兆。
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?
轉(zhuǎn)自:https://mp.weixin.qq.com/s/QOctINBbeskccQn7NMOUlA
箱熬!符號(hào)代表當(dāng)前位置沒發(fā)生匹配
關(guān)于邏輯表達(dá)式的距離:?"101 & 102 & !105"
對(duì)于有非邏輯符的表達(dá)式类垦, 如果101和102都匹配了, 在當(dāng)前位置105沒匹配中城须, 則
"101 & 102 & !105" 表達(dá)式會(huì)計(jì)算為true蚤认, on_match會(huì)返回邏輯表達(dá)式的id。