為什么需要性能測試工具
我們都知道,正則表達式使用進行搜索查找,沒有字符串直接查找快!而且性能是幾何倍數下降。那么,為什么正則表達式速度會比字符串搜索慢呢。我們來看看,正則表達式查找字符串的匹配過程吧。正則表達式由一些元字符,普通字符,量詞字符組合成。默認情況下,這些量詞元字符(*,+,?)都是貪婪模式,會最大長度匹配字符串。我們知道,正則表達式往往搜索路徑會有多個,我們看看,下面匹配過程。就知道,主要影響正則表達式執行性能有哪些了。
正則表達式匹配過程如:/d+abc,元字符是:”12345bdc”,查找會從左向右進行,/d+,貪婪模式,一下子匹配到12345,然后bdc與/d+不能匹配,”abc”中,”a”字符,開始匹配”bdc”,發現匹配失敗。正則表達式開始回溯匹配(貪婪模式量詞開始逐一減少匹配字符長度),/d+只匹配”1234”,”5bdc”與”abc”匹配,任然失敗。/d+繼續減少匹配長度為:”123”,”45bdc”與”abc”匹配,任然失敗。繼續回退,直到/d+匹配”1”,用”2345bdc”與”bdc”匹配,任然失敗。整個匹配就失敗了。
從上面過程中,我們發現,每次回溯,要重新操作匹配因此匹配搜索次數,直接影響正則表達式的性能。做正則表達式性能優化,一般就是優化查詢的次數。這個是我們分析過程,如果有個工具能夠實實在在看到每一步匹配過程,對于我們優化正則表達式將帶來太多方便了。這里介紹工具是:regexbuddy軟件,它就是一個實實在在看到匹配過程工具。
egexbuddy工具怎么樣使用,使用介紹
1、安裝完regexbuddy
該工具支持多種程序語言正則表達式,如:perl,pcre,javascript,python,ruby,c#,java等等,還能自動生成程序代碼,并且內部帶有大量的常用正則表達式。
2、一般切換到side by side:
3、匹配過程
從上面一個匹配看,這個簡單一個匹配,搜索了8次,進行了不斷查找。如果我們已經準確知道自己要匹配什么樣字符,我們可以對源正則表達式修改下,減少匹配次數。就達到優化正則表達式目的,提高匹配效率!
后記:這個工具是不是很強大呢,你知道在baidu搜索,該關鍵字:regexbuddy,就可以方便下載到。通過該工具,對我們寫出好的高性能正則表達式確實能帶來很大幫助。有時候可能一個小小修改,自己程序正則表達式匹配速度可能幾個數量級的提升。好了,歡迎大家交流,你有好的工具、方法,歡迎留言,可以給更多朋友分享!
新聞熱點
疑難解答
圖片精選