日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

boost pcre Greta RE2 正则表达式性能测试

發布時間:2025/7/14 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 測試。 Google 做 RE2 的另一個重要理由是 NFA 可以陷入遞歸死循環,導致提供服務的服務器被攻擊。 當然大多數的正則庫,都能限制遞歸深度或者非遞歸的內存用量來解決此問題。 測試種類:

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 大多數測試都很優秀(特性上夠用)。

?

注意:

GRETA已經多年沒維護過了,VS2008上編譯有個小的地方需要修改。可直接在GCC 3.2上編譯,但GCC4 系列無法編譯通過(理論上是GCC3.4開始就不能編譯了,采用新的解析器,所以模板語法上很多處需要修改) Linux 平臺下, posix 庫部分測試項,會表現成績異常優秀(由于 posix extended 正則能力有限),但不能匹配出預期數量的結果,所以屏蔽這些測試項。

測試方法:

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

轉載于:https://www.cnblogs.com/JesseFang/archive/2011/04/18/2019721.html

總結

以上是生活随笔為你收集整理的boost pcre Greta RE2 正则表达式性能测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。