8.2 正則表達(dá)式的匹配過程

正則表達(dá)式所使用的理論模型就是有窮自動(dòng)機(jī)慎冤,其具體實(shí)現(xiàn)稱為正則引擎(regex engine)严望。用正則表達(dá)式處理字符串村象,首先需要生成自動(dòng)機(jī)(“編譯”正則對(duì)象)亭病;之后無(wú)論輸入什么字符串鹅很,正則引擎都只需要老老實(shí)實(shí)地在狀態(tài)之間游走。

圖8-2顯示了正則表達(dá)式a(bb)+a對(duì)應(yīng)的自動(dòng)機(jī)罪帖。

[圖片上傳失敗...(image-cd0daa-1545311176685)]

在這臺(tái)有窮自動(dòng)機(jī)中促煮,s0、s1…整袁、s4是各個(gè)狀態(tài)菠齿,s0為開始狀態(tài),s4為最終狀態(tài)坐昙;轉(zhuǎn)移函數(shù)很直觀:比如當(dāng)前狀態(tài)是s0绳匀,輸入字符a,則轉(zhuǎn)移到s1炸客;如果當(dāng)前狀態(tài)s0疾棵,輸入的不是a,則直接退出痹仙。這也很好理解:該正則表達(dá)式只能匹配以a開頭的字符串是尔,否則不匹配。

圖8-3說(shuō)明了這臺(tái)有窮自動(dòng)機(jī)對(duì)字符串a(chǎn)bbbba的處理過程开仰。

[圖片上傳失敗...(image-d8d5d3-1545311176685)]

在經(jīng)歷了一系列對(duì)狀態(tài)轉(zhuǎn)移之后拟枚,字符串a(chǎn)bbbba處理完畢,自動(dòng)機(jī)停留在最終狀態(tài)上抖所,也就是說(shuō)梨州,字符串abbbba可以由正則表達(dá)式a(bb)+a匹配。

同一個(gè)正則表達(dá)式對(duì)應(yīng)的有窮自動(dòng)機(jī)不止一臺(tái)田轧,可能是若干臺(tái)暴匠,這些有窮自動(dòng)機(jī)是等價(jià)的。同樣是a(bb)+a傻粘,它可以對(duì)應(yīng)到如下對(duì)兩臺(tái)完全等價(jià)對(duì)有窮自動(dòng)機(jī)每窖。

[圖片上傳失敗...(image-9e26f2-1545311176685)]

仔細(xì)觀察發(fā)現(xiàn),第二臺(tái)自動(dòng)機(jī)有些奇怪弦悉,在輸入ab之后窒典,再輸入b,它所處第狀態(tài)是不確定的:可能在s1稽莉,也可能在s3瀑志。但是輸入a(bb)+a能匹配的字符串,它確實(shí)可以抵達(dá)最總狀態(tài)s4.

圖8-5所示的自動(dòng)機(jī)看起來(lái)更加奇怪,但它仍于a(bb)+a是完全對(duì)應(yīng)的劈猪。

[圖片上傳失敗...(image-4ae298-1545311176685)]

在狀態(tài)s3昧甘,即便沒有輸入任何字符,也不會(huì)停下來(lái)战得,而是憑空轉(zhuǎn)義到s1充边。也就是說(shuō),在某個(gè)時(shí)刻常侦,自動(dòng)機(jī)到底處于s3還是s1浇冰,這時(shí)不確定的!但是對(duì)于這種不確定性聋亡,并不會(huì)影響自動(dòng)機(jī)對(duì)于正則表達(dá)式a(bb)+a到匹配肘习。也就是說(shuō),這臺(tái)自動(dòng)機(jī)與之前的兩臺(tái)自動(dòng)機(jī)是完全等價(jià)的杀捻。

根據(jù)狀態(tài)的確定與否井厌,一般我們會(huì)把有窮自動(dòng)機(jī)(正則引擎)分為兩類:一類是確定型有窮自動(dòng)機(jī)(definite finite automata蚓庭,簡(jiǎn)稱DFA)致讥,在任何時(shí)刻,它所處的狀態(tài)是確定無(wú)疑的器赞;另一臺(tái)是非確定型有窮自動(dòng)機(jī)(non-definite finite automata垢袱,簡(jiǎn)稱NFA),在某個(gè)時(shí)刻港柜,它所處的狀態(tài)可能是不確定的请契。

圖8-6把上面的三臺(tái)自動(dòng)機(jī)做了分類,第一臺(tái)是DFA夏醉,另兩臺(tái)是NFA爽锥。

[圖片上傳失敗...(image-c82872-1545311176685)]

可以證明,DFA和NFA之間存在等價(jià)關(guān)系:也就是說(shuō)畔柔,每一臺(tái)DFA都可以等價(jià)轉(zhuǎn)換為一臺(tái)NFA氯夷,反過來(lái)也成立(具體證明過程很復(fù)雜,這里略去靶擦,有興趣可自行查閱計(jì)算理論相關(guān)資料)腮考。

比較正則表達(dá)式a(bb)+a和這三臺(tái)自動(dòng)機(jī),會(huì)發(fā)現(xiàn)NFA構(gòu)造起來(lái)更直觀玄捕,實(shí)際上這是普遍規(guī)律:從正則表達(dá)式出發(fā)踩蔚,構(gòu)造NFA的難度要小于DFA。但是正如之前說(shuō)的枚粘,DFA在任意時(shí)刻必定處于某個(gè)確定的狀態(tài)馅闽,而NFA可能處于若干狀態(tài)之中的一個(gè),所以,如果使用NFA福也,就必須保存所有可能的狀態(tài)孝冒,并且在某種狀態(tài)不可行時(shí)“回退”到之前保存的狀態(tài),這就是正則表達(dá)式匹配中的重要概念:回溯拟杉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庄涡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子搬设,更是在濱河造成了極大的恐慌穴店,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拿穴,死亡現(xiàn)場(chǎng)離奇詭異泣洞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)默色,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門球凰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人腿宰,你說(shuō)我怎么就攤上這事呕诉。” “怎么了吃度?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵甩挫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我椿每,道長(zhǎng)伊者,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任间护,我火速辦了婚禮亦渗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘汁尺。我一直安慰自己法精,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布均函。 她就那樣靜靜地躺著亿虽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪苞也。 梳的紋絲不亂的頭發(fā)上洛勉,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音如迟,去河邊找鬼收毫。 笑死攻走,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的此再。 我是一名探鬼主播昔搂,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼输拇!你這毒婦竟也來(lái)了摘符?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤策吠,失蹤者是張志新(化名)和其女友劉穎逛裤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猴抹,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡带族,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蟀给。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝙砌。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖跋理,靈堂內(nèi)的尸體忽然破棺而出择克,到底是詐尸還是另有隱情,我是刑警寧澤薪介,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布祠饺,位于F島的核電站越驻,受9級(jí)特大地震影響汁政,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缀旁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一记劈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧并巍,春花似錦目木、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至剃执,卻和暖如春誓禁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肾档。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工摹恰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辫继,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓俗慈,卻偏偏與公主長(zhǎng)得像姑宽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闺阱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容