簡體   English   中英

關於正則表達式執行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM