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

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>
            亚洲私人影吧| 国内精品伊人久久久久av一坑| 亚洲美女精品久久| 欧美国产第二页| 欧美成人午夜免费视在线看片| 国产精品国产精品| 欧美日韩国产大片| 欧美日韩在线电影| 国产精品成人av性教育| 欧美日韩视频在线第一区| 欧美日韩三区四区| 国产精品一二| 狠狠色狠狠色综合人人| 亚洲国产精品va在线看黑人| 亚洲人成在线影院| 国产精品99久久久久久白浆小说 | 国产有码一区二区| 影音先锋久久| 一区二区三区日韩欧美| 先锋影音网一区二区| 久久精品在线视频| 亚洲国产精品久久久久秋霞影院| 亚洲高清在线播放| 亚洲午夜在线观看视频在线| 欧美一级日韩一级| 欧美国产大片| 国产日韩欧美在线播放| 亚洲国产精品日韩| 性高湖久久久久久久久| 欧美不卡激情三级在线观看| 亚洲精品一区二区三区樱花 | aa级大片欧美| 久久久久久电影| 亚洲国产精品高清久久久| 一区二区三区四区五区精品| 久久久久成人精品| 国产精品国产自产拍高清av| 一区二区视频免费在线观看| 亚洲一区二区三区在线| 欧美福利网址| 性做久久久久久久免费看| 欧美激情亚洲综合一区| 狠狠干综合网| 欧美亚洲在线观看| 亚洲乱码国产乱码精品精天堂| 欧美在线观看网址综合| 欧美日韩性生活视频| 亚洲高清视频在线| 久久免费高清| 午夜天堂精品久久久久| 欧美日韩综合在线| 亚洲精品专区| 欧美大片国产精品| 久久国产一二区| 国产精品永久免费观看| 中文国产成人精品| 欧美激情精品| 久久久久久婷| 国产综合香蕉五月婷在线| 亚洲网站视频福利| 亚洲精品一区久久久久久| 久久理论片午夜琪琪电影网| 亚洲视频在线免费观看| 欧美日韩精品一区二区| 亚洲日本在线视频观看| 欧美福利小视频| 狼人天天伊人久久| 亚洲国产裸拍裸体视频在线观看乱了中文 | 蜜桃av久久久亚洲精品| 精品成人乱色一区二区| 久久九九热免费视频| 亚洲欧美一区在线| 国产日本欧美一区二区三区| 亚洲自拍偷拍色片视频| 亚洲少妇最新在线视频| 国产精品白丝av嫩草影院| 亚洲在线免费视频| 亚洲中无吗在线| 国产日韩欧美精品在线| 久久五月天婷婷| 久久综合狠狠综合久久综合88 | 久久久久免费| 久久亚洲色图| 亚洲精品一区二区在线观看| 在线高清一区| 亚洲成色www8888| 欧美精品免费在线| 亚洲欧美日韩视频二区| 午夜精品在线看| 亚洲国产欧美另类丝袜| 亚洲国产精品第一区二区| 欧美日韩免费| 久久精品视频在线| 免费观看欧美在线视频的网站| 欧美性大战久久久久久久| 性色一区二区| 老司机久久99久久精品播放免费 | 欧美午夜一区| 狼人社综合社区| 欧美日韩国产区一| 久久久久国色av免费观看性色| 蜜桃av综合| 欧美一级专区免费大片| 久久亚洲春色中文字幕| 亚洲四色影视在线观看| 欧美专区亚洲专区| 在线亚洲免费| 久久riav二区三区| 亚洲视频在线播放| 久久精品在线| 午夜精品久久| 在线一区二区三区做爰视频网站| 亚洲欧美日韩综合aⅴ视频| 欧美一区二区在线免费播放| 日韩网站在线观看| 欧美中文字幕在线| 午夜在线精品偷拍| 欧美精品激情blacked18| 久久精品国产99国产精品| 欧美日韩精品一区二区在线播放 | 韩国一区电影| 亚洲天天影视| 亚洲性视频网址| 欧美激情精品久久久| 麻豆精品传媒视频| 国模私拍一区二区三区| 亚洲在线电影| 亚洲欧美一区二区三区久久| 欧美日韩国产一区二区| 亚洲国产另类久久久精品极度| 一区二区三区在线观看视频| 欧美在线免费播放| 久久久久国产精品午夜一区| 国产区二精品视| 午夜亚洲性色福利视频| 久久国产夜色精品鲁鲁99| 国产精品久久久久久久久免费桃花| 日韩视频在线观看国产| 这里是久久伊人| 欧美日韩精品免费观看视一区二区 | 性久久久久久久久久久久| 亚洲理伦在线| 久久精品视频在线免费观看| 久久精品国产精品| 国产精品高清网站| 亚洲精品视频在线观看免费| 在线免费不卡视频| 欧美亚洲在线观看| 亚洲自拍偷拍视频| 欧美日韩免费观看一区二区三区| 亚洲剧情一区二区| 亚洲美女在线国产| 欧美jizz19性欧美| 欧美国产一区二区| 国产精品video| 亚洲欧美精品| 久久成人国产精品| 国产精品一区二区你懂的| 99国产精品久久久久老师| 亚洲欧美国产日韩中文字幕| 欧美另类一区| 日韩视频在线一区二区三区| 亚洲美女啪啪| 亚洲欧美三级在线| 欧美成人免费播放| 亚洲欧洲一区二区天堂久久| 久久婷婷激情| 欧美国产精品va在线观看| 在线综合亚洲| 亚洲成色最大综合在线| 亚洲第一中文字幕| 亚洲一区二区三区国产| 欧美日韩国产美| 一本色道久久综合狠狠躁篇怎么玩| 日韩一级成人av| 久久九九免费| 99国内精品久久| 午夜免费久久久久| 国产伦精品一区二区三区| 亚洲欧美成人在线| 亚洲精品久久| 亚洲欧美日韩国产综合| 国产欧美综合一区二区三区| 久久久久国产精品一区二区| 一区二区三区产品免费精品久久75| 亚洲免费在线播放| 国产综合色产在线精品| 久久综合网色—综合色88| 亚洲美女一区| 日韩亚洲精品电影| 国产精品私房写真福利视频| 欧美一区二区在线免费观看| 亚洲二区视频在线| 亚洲无限av看| 在线观看亚洲精品| 欧美视频在线看| 久久久久久久久久码影片| 亚洲性感美女99在线| 蜜臀久久久99精品久久久久久| 99热精品在线|