[英]Regular expression implementation details
如何在Python中實現正則表達式? 那里有什么樣的效率保證? 實施是“標准”,還是可以改變?
我認為正則表達式將作為DFA實現,因此非常有效(最多需要對輸入字符串進行一次掃描)。 Laurence Gonsalves提出了一個有趣的觀點,即並非所有Python正則表達式都是常規的。 (他的例子是r“(a +)b \\ 1”,它匹配a的一些數量,ab,然后是與之前相同數量的a)。 使用DFA顯然無法實現這一點。
那么,重申一下:Python正則表達式的實現細節和保證是什么?
如果有人可以給出某種解釋(根據實現),為什么正則表達式“cat | catdog”和“catdog | cat”會在字符串“catdog”中導致不同的搜索結果,這也很好。在我之前提到的問題中提到過 。
Python RE上沒有任何“效率保證”,而不是語言的任何其他部分(C ++的標准庫是我所知道的唯一廣泛的語言標准,試圖建立這樣的標准 - 但是沒有標准,即使在C ++中,指定,比如說,乘以兩個整數必須花費恆定的時間,或類似的東西); 也不保證任何時候都不會應用大的優化。
今天,F。Lundh(最初負責實現Python當前的RE模塊等),在Pycon Italia上展示Unladen Swallow,他們提到他們將探索的一個途徑是將正則表達式直接編譯為LLVM中間代碼(而不是他們的由ad-hoc運行時解釋自己的字節碼風格 - 因為普通的Python代碼也被編譯到LLVM(在即將發布的Unladen Swallow版本中),RE及其周圍的Python代碼可以一起優化,甚至有時甚至以非常激進的方式 我懷疑這樣的事情很快就會接近“生產就緒”,盡管如此;-)。
將正則表達式與反向引用匹配是NP難的 ,這至少與NP-Complete一樣難。 這基本上意味着它與您可能遇到的任何問題一樣困難,並且大多數計算機科學家認為在最壞的情況下它可能需要指數時間。 如果你能在多項式時間內匹配這些“常規”表達式(在技術意義上真的不是這樣),你就可以贏得一百萬美元 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.