2016-06-08 41 views
4

由於錯誤的語法和非明顯的細節,一些正則表達式具有指數執行時間。如果一些正則表達式具有線性或指數執行時間,是否有任何常見的分析和學習方法?正則表達式執行時間分析

+0

顯然[正則表達式是邪惡的](https://stackoverflow.com/questions/4664850/find-all-occurrences-of-a-substring-in-python#comment83882449_4664850) – uhoh

+1

@uhoh,是 - 現在我知道了肯定 –

+0

感謝您的警告,我現在要避開它。 ;-) – uhoh

回答

4

我傾向於只使用perl並在執行正則表達式操作之前打開use re 'debug';

這將打印正則表達式正在處理的步驟,並快速給出效率的概念。

沒有硬性規定 - 我尋找的大警告標誌是這個正則表達式是否需要回溯。請參閱:Catastrophic Backtracking

這可能發生更多當您使用前瞻/後向(但不必)時,很容易。

儘管事物的宏偉計劃 - 值得記住的是,雖然正則表達式是一種編程語言,它的起始點是作爲一個權力的搜索和替換。因此,在其中實現複雜的邏輯意味着你正在創建難以維護和調試的代碼 - 所以你不應該這樣做。

perl中有用的技巧之一 - 它可以使用命令行以與sed/grep/awk幾乎相同的方式運行。

所以,你可以啓用正則表達式調試,然後執行「sed的風格」:

perl -pe 's/search/replace' somefile 

但你可以添加「調試」正則表達式:

perl -Mre=debug -pe 's/search/replace/' somefile 

這將調試它,而你」重新開始。

+2

災難性的回溯是最嚴重的罪犯 - 小心嵌套量詞。 –

+1

我想我剛剛發現了一個使用Perl的理由:) –