青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

NFA DFA Regex

要深入了解正則表達式,必須首先理解有窮自動機。

有窮自動機(Finite Automate)是用來模擬實物系統的數學模型,它包括如下五個部分:

  • 有窮狀態集States
  • 輸入字符集Input symbols
  • 轉移函數Transitions
  • 起始狀態Start state
  • 接受狀態Accepting state(s)


下圖為一臺有窮自動機
clip_image001

可以看到,該自動機包含四個狀態q0, q1, q2, q3,兩個輸入字符a, b,轉移函數如圖所示,起始狀態為q0,接受狀態為q3

有窮自動機,按照轉移函數的不同,又可分為確定型有窮自動機(Determinism Finite Automate, DFA),與非確定型有窮自動機(Non-determinism Finite Automate, NFA)。
非確定有窮自動機容許轉移函數不確定,換句話說,對任意狀態,輸入任意一個字符,可以轉移到0個,1個或者多個狀態。
下圖是一臺非確定有窮自動機,可以看到,對狀態q0輸入字符a,既可以轉移到q0,也可以轉移到q1,這就是非確定的意義所在。
clip_image002


對某個自動機來說,如果從起始狀態,接受一系列輸入字符,可以轉移到接受狀態,即認為這一系列字符可以被自動機接受。

如果兩臺自動機能夠接受的輸入字符串(或者叫做正則語言”Regular Language)完全相同,則這兩臺自動機是等價的。
可以證明,對于每一個非確定有窮自動機,都存在與之等價的確定型有窮自動機(證明略)。

正則表達式就是建立在自動機的理論基礎上的:用戶寫完正則表達式之后,正則引擎會按照這個表達式構建相應的自動機(可能是NFA,也可能是DFA,但它們必定是等價的),若輸入一串文本之后,自動機抵達了接受狀態,則這串文本可以匹配用戶指定的正則表達式。

下面是同一個正則表達式 a|ab 對應的NFADFA

NFA

clip_image003

DFA

clip_image004



Mastering Regular Expression中,Friedl首先分析了NFADFA的區別,DFA比較快,但不提供Backtrack(回溯)功能,NFA比較慢,但提供了Backtrack功能。
在分析兩種引擎的匹配過程時,Friedl指出,NFA是基于表達式的(Regex-Directed),而DFA是基于文本的(Text-Directed)。
舉例來說,對于正則表達式 to(nite|knight|night)NFA在匹配最開始兩個字符(to)之后,剩下的三個組件(component)是 nite, knight night,于是正則引擎會依次嘗試這三個選擇分支(每次嘗試一個);而DFA在匹配最開始兩個字符之后,會將剩下的三個選擇拆分作字符,并行嘗試,也就是說,匹配 to 之后,先匹配 k 或者 n ,如果 k 不能匹配,則放棄 knigth 所在的分支,再匹配 i ,再匹配 t g ……這樣繼續下去,直到匹配結束。

不幸的是,Friedl對匹配過程的分析,是完全錯誤的——引擎的不同,是指構建的自動機的不同,而不是匹配算法的不同!
DFA
引擎在任意時刻必定處于某個確定的狀態,而NFA引擎可能處于一組狀態之中的任何一個,所以,NFA引擎必須記錄所有的可能路徑(trace multiple possible routes through the NFA),NFA之所以能夠提供Backtrack的功能,原因就在這里。
傳統的NFA匹配算法是帶回溯的深度優先搜索(backtracking depth-first search,就是上文所說的Regex-Based過程),而新的PCRE算法提供了效率更高的廣度優先搜索,可以同時保持所有可能的NFA狀態(請參考http://www.cl.cam.ac.uk/Teaching/current/RLFA/,尤其是Lecture Notessection 2.2)。

Friedl
的錯誤就在這里,他混淆了應用PCRE算法的NFADFA的匹配過程。
需要指出的是,即使應用PCRE算法,NFA的速度仍然低于DFA,這是由NFA需要同時保存多種可能的性質決定的。從理論上說,如果我們不需要應用 Backtrack,完全可以從NFA構造出等價的DFA,再進行匹配,這樣能大大提高速度——代價是,DFA需要更多的空間。

posted on 2009-09-29 13:56 肥仔 閱讀(2711) 評論(3)  編輯 收藏 引用 所屬分類: 狀態機 & 自動機 & 形式語言

評論

# re: NFA DFA Regex  回復  更多評論   

可以參考我的cppblog主頁上的兩篇關于如何開發一個正則表達式引擎的文章。我不僅講了必要的理論知識,連實現的時候大多數情況下會遇到的問題也講了。
2009-09-29 15:43 | 陳梓瀚(vczh)

# re: NFA DFA Regex  回復  更多評論   

因為現代化的regex實際上是不能用DFA來實現的。考慮一個例子:
(<abc>\d+)|(<def>\d*)
2009-09-29 15:45 | 陳梓瀚(vczh)

# re: NFA DFA Regex  回復  更多評論   

請問一下,你是用什么工具繪圖的?
2011-12-22 23:33 | YorkTsai
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国内外成人免费激情在线视频网站| 亚洲综合日韩中文字幕v在线| 国产欧美一区二区三区沐欲| 亚洲看片网站| 久久精品国产亚洲高清剧情介绍| 国内在线观看一区二区三区| 欧美精品免费看| 亚洲夜间福利| 亚洲天堂av在线免费观看| 欧美在线视频播放| 亚洲最新在线| 女女同性女同一区二区三区91| 亚洲日本久久| 亚洲激情二区| 在线播放日韩| 亚洲欧洲精品天堂一级| 国产伦精品一区| 国产麻豆一精品一av一免费| 国产日产欧美a一级在线| 久久亚洲综合| 久久精品国产亚洲一区二区三区| 亚洲国产另类精品专区| 亚洲亚洲精品在线观看| 激情欧美一区二区三区在线观看| 久热精品在线| 欧美亚洲一区在线| 欧美夫妇交换俱乐部在线观看| 在线一区二区三区四区五区| 国产精品一二三四| 欧美a级一区二区| 亚洲桃色在线一区| 欧美成人久久| 亚洲一区二区三区在线观看视频| 国产精品久久久久9999| 亚洲毛片视频| 午夜亚洲一区| 一区二区三区在线高清| 在线亚洲国产精品网站| 嫩草影视亚洲| 久久99伊人| 国际精品欧美精品| 欧美日韩国产精品成人| 午夜免费日韩视频| 欧美日韩ab片| 久久国产欧美精品| 美女视频一区免费观看| 1024亚洲| 欧美一区二区日韩一区二区| 亚洲青涩在线| 一区二区国产日产| 久久综合伊人77777麻豆| 99在线精品视频| 久久三级视频| 精品99一区二区三区| 亚洲精品一区二区三区av| 亚洲人成网站影音先锋播放| 欧美日韩亚洲国产一区| 老司机久久99久久精品播放免费| 欧美精品一区二区三区在线看午夜| 亚洲全部视频| 久久一区二区三区av| 国语自产精品视频在线看一大j8 | 国产一区二区三区四区在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲欧美日韩中文在线制服| 国产偷国产偷精品高清尤物| 99在线观看免费视频精品观看| 久久精品国产免费| 亚洲自拍另类| 亚洲国产99| 影音先锋日韩有码| 国产在线乱码一区二区三区| 久久se精品一区精品二区| 午夜精品国产精品大乳美女| 欧美久久久久久| 欧美在线视频一区| 亚洲美女视频在线观看| 欧美亚州在线观看| 欧美精品综合| 欧美日韩 国产精品| 欧美极品欧美精品欧美视频| 欧美在线视频观看免费网站| 一级成人国产| 欧美在线国产精品| 宅男精品视频| 9l国产精品久久久久麻豆| 欧美激情精品久久久久久免费印度| 欧美高清视频| 亚洲人被黑人高潮完整版| 欧美3dxxxxhd| 亚洲一区二区三区在线播放| 日韩视频精品| 午夜精品国产更新| 久久青草福利网站| 久久久久久久久久久一区 | 日韩视频不卡| 亚洲欧美在线免费| 久久亚洲美女| 国产精品一区二区久激情瑜伽| 欧美大片免费久久精品三p| 欧美精品一区二区三区久久久竹菊 | …久久精品99久久香蕉国产| 国语自产偷拍精品视频偷| 亚洲国产精品ⅴa在线观看 | 一区二区三区自拍| 亚洲视频免费| 欧美激情视频一区二区三区不卡| 久久一区亚洲| 亚洲欧美激情一区| 欧美激情网站在线观看| 国外成人免费视频| 午夜精品成人在线| 国产目拍亚洲精品99久久精品 | 欧美成年人网| 国产精品你懂的| 亚洲欧洲一区| 亚洲第一区中文99精品| 最新中文字幕一区二区三区| 午夜久久久久| 欧美日韩在线播放| 91久久精品一区| 欧美一级专区免费大片| 日韩亚洲欧美综合| 蜜臀久久99精品久久久画质超高清 | 久久久欧美精品| 欧美暴力喷水在线| 久久久久网址| 国产农村妇女毛片精品久久莱园子 | 精品电影在线观看| 欧美中文字幕不卡| 亚洲精品视频在线播放| 久久久噜噜噜久久狠狠50岁| 亚洲一区二区三区在线| 欧美体内she精视频| 中文日韩在线视频| 久久一区视频| 亚洲精品日产精品乱码不卡| 久久夜色精品国产噜噜av| 欧美在线3区| 亚洲一区二区三区精品视频 | 欧美日韩国内| 日韩午夜激情av| 欧美一二三视频| 狠狠爱www人成狠狠爱综合网| 免播放器亚洲一区| 欧美电影打屁股sp| 亚洲一区www| 在线看不卡av| 欧美国产精品人人做人人爱| 欧美精品成人一区二区在线观看 | 欧美一区二区视频在线观看| 亚洲天堂网在线观看| 国产日产欧美精品| 久久不见久久见免费视频1| 久久精品主播| 亚洲欧美国产一区二区三区| 韩国免费一区| 在线一区亚洲| 午夜精品一区二区三区在线播放| 麻豆freexxxx性91精品| 亚洲欧美偷拍卡通变态| 国产美女扒开尿口久久久| 亚洲精品在线免费观看视频| 亚洲精品极品| 国产精品乱子久久久久| 久久精品最新地址| 亚洲乱码国产乱码精品精| 久久国产精品免费一区| 91久久线看在观草草青青| 欧美成人免费播放| 亚洲欧美一区二区原创| 亚洲精品欧美日韩| 久久精品一区二区| 一本一道久久综合狠狠老精东影业| 国产精品自拍小视频| 久久久青草青青国产亚洲免观| 一本色道久久综合狠狠躁篇怎么玩| 欧美黄网免费在线观看| 欧美中文字幕不卡| 亚洲免费一级电影| 亚洲一二三四久久| 亚洲美女av网站| 国产精品综合av一区二区国产馆| 榴莲视频成人在线观看| 久久精品一本久久99精品| 欧美日韩你懂的| 欧美黄色片免费观看| 国产三级欧美三级日产三级99| 欧美v国产在线一区二区三区| 国产免费观看久久| 99一区二区| 性视频1819p久久| 亚洲一区二区三区在线播放| 欧美另类视频| 欧美高清视频在线播放| 欧美极品aⅴ影院| 久色成人在线| 午夜精品久久久久久久久久久| 国产自产在线视频一区| 久久这里只有|