2009-11-17 35 views
6

有人知道Python(任何版本)是否使用NFAs(非確定性有限自動機)來評估正則表達式還是使用其他一些機制?請提供鏈接/參考(如果可用)。Python是否在re模塊中使用NFAs進行正則表達式評估?

+1

的大討論由於大多數RE引擎現在允許進行匹配的非正規語言我懷疑任何現代的可再生能源發動機實際上仍然使用NFA或DFA。 – Joey 2009-11-17 13:35:45

+0

好吧,由於RE引擎可以識別RE的一個常規使用的子集,因此對這些場景進行優化是有意義的。所以他們有時可能會使用NFA或DFA。 – MSalters 2009-11-17 13:54:15

回答

5

NFA。

見Friedl的精通正則表達式,第3版,第4章 - 表4-1,第145頁。

谷歌圖書有a preview它。

+0

很好的參考。謝謝。 – Johan 2009-11-18 19:56:27

+0

不客氣Johan。 – 2009-11-18 20:01:33

4

這應該小於在DFA一毫秒:

$ time python3 -c 'import re; re.match("a?"*25+"a"*25, "a"*25)' 
real 0m7.273s 

變化25 100,它不會終止一輩子。

這裏是如何看起來在DFA(grep的):

$ time echo "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |grep "a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
real 0m0.063s 

有本議題http://swtch.com/~rsc/regexp/regexp1.html

相關問題