[英]About regexp performancing
給定字符串ab
鑒於這種正則表達式模式
(a)(b)
如果我們需要刪除完整的字符串,但打印第二組,我們可以編寫2個變體:
1) preg_replace("#(a)(b)#", "$2", "ab") // save both group
還有:
2) preg_replace("#(?:a)(b)#", "$1", "ab") // dont save first group
哪種變體更適合性能?
哪種變體更適合性能?
無論是。
如果你只需要做幾次替換,那就沒關系了。 如果您必須進行數百萬次替換,則必須考慮源數據的另一種格式,這將需要較少的解析。
但無論如何,現在電腦很快。 我的意思是快。
足夠快以運行基於JSON或XML的應用程序,而JSON或XML解析需要比簡單的正則表達式更多的資源。 他們運行良好。 所以,我懷疑你會遇到這樣一個狀態,這樣的正則表達式會影響任何事情
我以緊湊的循環運行每個操作5,000,000,並比較時間。 我實際比較了四個操作:
preg_replace("#(a)(b)#", "$2", "ab");
preg_replace("#(?:a)(b)#", "$2", "ab");
preg_replace("#a(b)#", "$2", "ab");
preg_replace("#a(?=b)#", "", "ab");
我沒有看到時間上的非常一致的差異,所以我認為它實際上對性能無關緊要,即我會從設計/語義角度選擇最合理的。
#1和#2表現差不多。 #2似乎稍快,但偶爾會慢一點(可能是由於服務器噪音)。 #3始終比這快5%左右,選項#4比#3快2%左右(即它似乎是最好的,可能是因為它不必捕獲或插入任何東西)。
不過,我只是選擇最有意義的東西。
我意識到str_replace("ab", "b", "ab");
可能不是類似的,但如果可以,請使用它。 它的速度始終是其他任何速度的兩倍多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.