1. 程式人生 > >Hyperscan 5.0.0 新特性

Hyperscan 5.0.0 新特性

這一新版本主要涉及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支援。