婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 正則基礎之 NFA引擎匹配原理

正則基礎之 NFA引擎匹配原理

熱門標簽:福州工作銷售電話機器人 RO地圖標注app 電銷機器人公司簡介 高德地圖標注短信簽約 知名的電話機器人 自制電銷機器人 百音電話機器人 湖南企業智能外呼系統供應商 錫林郭勒盟地圖標注位置

1       為什么要了解引擎匹配原理

一個個音符雜亂無章的組合在一起,彈奏出的或許就是噪音,同樣的音符經過作曲家的手,就可以譜出非常動聽的樂曲,一個演奏者同樣可以照著樂譜奏出動聽的樂曲,但他/她或許不知道該如何去改變音符的組合,使得樂曲更動聽。

作為正則的使用者也一樣,不懂正則引擎原理的情況下,同樣可以寫出滿足需求的正則,但是不知道原理,卻很難寫出高效且沒有隱患的正則。所以對于經常使用正則,或是有興趣深入學習正則的人,還是有必要了解一下正則引擎的匹配原理的。

2       正則表達式引擎

正則引擎大體上可分為不同的兩類:DFA和NFA,而NFA又基本上可以分為傳統型NFA和POSIX NFA。

DFA Deterministic finite automaton 確定型有窮自動機

NFA Non-deterministic finite automaton 非確定型有窮自動機

Traditional NFA

POSIX NFA

DFA引擎因為不需要回溯,所以匹配快速,但不支持捕獲組,所以也就不支持反向引用和$number這種引用方式,目前使用DFA引擎的語言和工具主要有awk、egrep 和 lex。

POSIX NFA主要指符合POSIX標準的NFA引擎,它的特點主要是提供longest-leftmost匹配,也就是在找到最左側最長匹配之前,它將繼續回溯。同DFA一樣,非貪婪模式或者說忽略優先量詞對于POSIX NFA同樣是沒有意義的。

大多數語言和工具使用的是傳統型的NFA引擎,它有一些DFA不支持的特性:

  捕獲組、反向引用和$number引用方式;

  環視(Lookaround,(?=…)、(?!…)、(?=…)、(?!…)),或者有的有文章叫做預搜索;

  忽略優化量詞(??、*?、+?、{m,n}?、{m,}?),或者有的文章叫做非貪婪模式;

  占有優先量詞(?+、*+、++、{m,n}+、{m,}+,目前僅Java和PCRE支持),固化分組(?>…)。

引擎間的區別不是本文的重點,僅做簡要的介紹,有興趣的可參考相關文獻。

3       預備知識

3.1     字符串組成

對于字符串“abc”而言,包括三個字符和四個位置。

3.2     占有字符和零寬度

正則表達式匹配過程中,如果子表達式匹配到的是字符內容,而非位置,并被保存到最終的匹配結果中,那么就認為這個子表達式是占有字符的;如果子表達式匹配的僅僅是位置,或者匹配的內容并不保存到最終的匹配結果中,那么就認為這個子表達式是零寬度的。

占有字符是互斥的,零寬度是非互斥的。也就是一個字符,同一時間只能由一個子表達式匹配,而一個位置,卻可以同時由多個零寬度的子表達式匹配。

3.3     控制權和傳動

正則的匹配過程,通常情況下都是由一個子表達式(可能為一個普通字符、元字符或元字符序列組成)取得控制權,從字符串的某一位置開始嘗試匹配,一個子表達式開始嘗試匹配的位置,是從前一子表達匹配成功的結束位置開始的。如正則表達式:

(子表達式一)(子表達式二)

假設(子表達式一)為零寬度表達式,由于它匹配開始和結束的位置是同一個,如位置0,那么(子表達式二)是從位置0開始嘗試匹配的。

假設(子表達式一)為占有字符的表達式,由于它匹配開始和結束的位置不是同一個,如匹配成功開始于位置0,結束于位置2,那么(子表達式二)是從位置2開始嘗試匹配的。

而對于整個表達式來說,通常是由字符串位置0開始嘗試匹配的。如果在位置0開始的嘗試,匹配到字符串某一位置時整個表達式匹配失敗,那么引擎會使正則向前傳動,整個表達式從位置1開始重新嘗試匹配,依此類推,直到報告匹配成功或嘗試到最后一個位置后報告匹配失敗。

4       正則表達式簡單匹本過程

4.1     基礎匹配過程

 

源字符串:abc

正則表達式:abc

匹配過程:

首先由字符“a”取得控制權,從位置0開始匹配,由“a”來匹配“a”,匹配成功,控制權交給字符“b”;由于“a”已被“a”匹配,所以“b”從位置1開始嘗試匹配,由“b”來匹配“b”,匹配成功,控制權交給“c”;由“c”來匹配“c”,匹配成功。

此時正則表達式匹配完成,報告匹配成功。匹配結果為“abc”,開始位置為0,結束位置為3。

 

4.2     含有匹配優先量詞的匹配過程——匹配成功(一)

源字符串:abc

正則表達式:ab?c

量詞“?”屬于匹配優先量詞,在可匹配可不匹配時,會先選擇嘗試匹配,只有這種選擇會使整個表達式無法匹配成功時,才會嘗試讓出匹配到的內容。這里的量詞“?”是用來修飾字符“b”的,所以“b?”是一個整體。

匹配過程:

首先由字符“a”取得控制權,從位置0開始匹配,由“a”來匹配“a”,匹配成功,控制權交給字符“b?”;由于“?”是匹配優先量詞,所以會先嘗試進行匹配,由“b?”來匹配“b”,匹配成功,控制權交給“c”,同時記錄一個備選狀態;由“c”來匹配“c”,匹配成功。記錄的備選狀態丟棄。

此時正則表達式匹配完成,報告匹配成功。匹配結果為“abc”,開始位置為0,結束位置為3。

4.3     含有匹配優先量詞的匹配過程——匹配成功(二)

源字符串:ac

正則表達式:ab?c

匹配過程:

首先由字符“a”取得控制權,從位置0開始匹配,由“a”來匹配“a”,匹配成功,控制權交給字符“b?”;先嘗試進行匹配,由“b?”來匹配“c”,同時記錄一個備選狀態,匹配失敗,此時進行回溯,找到備選狀態,“b?”忽略匹配,讓出控制權,把控制權交給“c”;由“c”來匹配“c”,匹配成功。

此時正則表達式匹配完成,報告匹配成功。匹配結果為“ac”,開始位置為0,結束位置為2。其中“b?”不匹配任何內容。

4.4     含有匹配優先量詞的匹配過程——匹配失敗

源字符串:abd

正則表達式:ab?c

匹配過程:

首先由字符“a”取得控制權,從位置0開始匹配,由“a”來匹配“a”,匹配成功,控制權交給字符“b?”;先嘗試進行匹配,由“b?”來匹配“b”,同時記錄一個備選狀態,匹配成功,控制權交給“c”;由“c”來匹配“d”,匹配失敗,此時進行回溯,找到記錄的備選狀態,“b?”忽略匹配,即“b?”不匹配“b”,讓出控制權,把控制權交給“c”;由“c”來匹配“b”,匹配失敗。此時第一輪匹配嘗試失敗。

正則引擎使正則向前傳動,由位置1開始嘗試匹配,由“a”來匹配“b”,匹配失敗,沒有備選狀態,第二輪匹配嘗試失敗。

繼續向前傳動,直到在位置3嘗試匹配失敗,匹配結束。此時報告整個表達式匹配失敗。

4.5     含有忽略優先量詞的匹配過程——匹配成功

源字符串:abc

正則表達式:ab??c

量詞“??”屬于忽略優先量詞,在可匹配可不匹配時,會先選擇不匹配,只有這種選擇會使整個表達式無法匹配成功時,才會嘗試進行匹配。這里的量詞“??”是用來修飾字符“b”的,所以“b??”是一個整體。

匹配過程:

首先由字符“a”取得控制權,從位置0開始匹配,由“a”來匹配“a”,匹配成功,控制權交給字符“b??”;先嘗試忽略匹配,即“b??”不進行匹配,同時記錄一個備選狀態,控制權交給“c”;由“c”來匹配“b”,匹配失敗,此時進行回溯,找到記錄的備選狀態,“b??”嘗試匹配,即“b??”來匹配“b”,匹配成功,把控制權交給“c”;由“c”來匹配“c”,匹配成功。

此時正則表達式匹配完成,報告匹配成功。匹配結果為“abc”,開始位置為0,結束位置為3。其中“b??”匹配字符“b”。

4.6     零寬度匹配過程

源字符串:a12

正則表達式:^(?=[a-z])[a-z0-9]+$

元字符“^”和“$”匹配的只是位置,順序環視“(?=[a-z])”只進行匹配,并不占有字符,也不將匹配的內容保存到最終的匹配結果,所以都是零寬度的。

這個正則的意義就是匹配由字母和數字組成的,第一個字符是字母的字符串。

匹配過程:

首先由元字符“^”取得控制權,從位置0開始匹配,“^”匹配的就是開始位置“位置0”,匹配成功,控制權交給順序環視“(?=[a-z])”;

(?=[a-z])”要求它所在位置右側必須是字母才能匹配成功,零寬度的子表達式之間是不互斥的,即同一個位置可以同時由多個零寬度子表達式匹配,所以它也是從位置0嘗試進行匹配,位置0的右側是字符“a”,符合要求,匹配成功,控制權交給“[a-z0-9]+”;

因為“(?=[a-z])”只進行匹配,并不將匹配到的內容保存到最后結果,并且“(?=[a-z])”匹配成功的位置是位置0,所以“[a-z0-9]+”也是從位置0開始嘗試匹配的,“[a-z0-9]+”首先嘗試匹配“a”,匹配成功,繼續嘗試匹配,可以成功匹配接下來的“1”和“2”,此時已經匹配到位置3,位置3的右側已沒有字符,這時會把控制權交給“$”;

元字符“$”從位置3開始嘗試匹配,它匹配的是結束位置,也就是“位置3”,匹配成功。

此時正則表達式匹配完成,報告匹配成功。匹配結果為“a12”,開始位置為0,結束位置為3。其中“^”匹配位置0,“(?=[a-z])”匹配位置0,“[a-z0-9]+”匹配字符串“a12”,“$”匹配位置3。

標簽:茂名 西寧 怒江 河北 吉林 昆明 秦皇島 玉林

巨人網絡通訊聲明:本文標題《正則基礎之 NFA引擎匹配原理》,本文關鍵詞  正則,基礎,之,NFA,引擎,匹配,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《正則基礎之 NFA引擎匹配原理》相關的同類信息!
  • 本頁收集關于正則基礎之 NFA引擎匹配原理的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩欧美一级精品久久| 亚洲欧美成人一区二区三区| 国产精品色噜噜| 香蕉久久夜色精品国产使用方法| 国产成人精品亚洲午夜麻豆| 欧美电影一区二区| 一区二区三区电影在线播| 国产一区二区h| 日韩色在线观看| 亚洲成av人综合在线观看| 波多野结衣中文字幕一区| 精品理论电影在线观看| 免费在线观看一区二区三区| 欧美日韩一区二区三区免费看 | 日本欧洲一区二区| 色综合久久88色综合天天免费| 久久午夜电影网| 狠狠色综合色综合网络| 精品奇米国产一区二区三区| 天堂久久一区二区三区| 欧美日韩国产一级二级| 亚洲午夜激情网页| 91免费视频观看| 亚洲女与黑人做爰| 欧美亚洲日本国产| 亚洲一区二区四区蜜桃| 欧美午夜精品免费| 丝瓜av网站精品一区二区 | 91精品91久久久中77777| 国产精品日韩成人| 99精品久久99久久久久| 亚洲欧洲av在线| 色女孩综合影院| 亚洲第一成人在线| 3d动漫精品啪啪1区2区免费 | 国产精品毛片久久久久久| 成人深夜在线观看| 亚洲精品成人a在线观看| 欧美亚洲另类激情小说| 欧美a级理论片| 精品国产网站在线观看| 国产九九视频一区二区三区| 国产精品国产三级国产aⅴ无密码| 99久久综合狠狠综合久久| 一区av在线播放| 538在线一区二区精品国产| 韩国毛片一区二区三区| 国产精品国产三级国产普通话三级 | 亚洲综合自拍偷拍| 欧美军同video69gay| 激情综合网最新| 国产精品毛片高清在线完整版| 91看片淫黄大片一级在线观看| 亚洲va天堂va国产va久| 久久久欧美精品sm网站| 91啪在线观看| 麻豆国产欧美一区二区三区| 国产亚洲一二三区| 欧美在线不卡一区| 国产乱色国产精品免费视频| 1区2区3区欧美| 日韩欧美一区二区不卡| 成人免费视频一区| 日韩av电影一区| 国产精品久久国产精麻豆99网站| 欧美影院一区二区三区| 极品美女销魂一区二区三区免费| 伊人婷婷欧美激情| 精品福利av导航| 日本道色综合久久| 国产精品1区2区| 肉丝袜脚交视频一区二区| 中文字幕不卡在线观看| 欧美一区二区三区啪啪| 91免费视频观看| 国产精品一区二区在线播放| 偷拍一区二区三区| 亚洲美女电影在线| 国产欧美综合在线| 欧美一级搡bbbb搡bbbb| 日本伦理一区二区| av网站一区二区三区| 极品销魂美女一区二区三区| 亚洲国产精品一区二区www在线| 日本一区二区电影| 日韩视频123| 欧美一区二区三区免费视频| 在线一区二区三区四区五区| 成人免费av在线| 国产精品99精品久久免费| 免费在线观看日韩欧美| 午夜精品一区二区三区三上悠亚| 国产精品久久久久毛片软件| 久久婷婷综合激情| 久久丝袜美腿综合| 欧美精品一区二| 精品免费视频.| 精品剧情在线观看| 欧美大片拔萝卜| 91精品国产综合久久久蜜臀粉嫩 | 亚洲国产精品精华液网站| 亚洲日本青草视频在线怡红院| 久久久不卡网国产精品一区| 2021中文字幕一区亚洲| 2023国产精品视频| 国产午夜精品美女毛片视频| 精品福利av导航| 国产亚洲精品久| 国产精品理伦片| 亚洲欧洲国产日本综合| 樱桃国产成人精品视频| 国内久久婷婷综合| 国产真实乱对白精彩久久| 国产一区二区三区四区五区入口 | 欧美丝袜丝交足nylons图片| 色吊一区二区三区| 欧美在线一区二区| 欧美疯狂性受xxxxx喷水图片| 91精品国产欧美日韩| 亚洲永久精品大片| 偷偷要91色婷婷| 精品在线你懂的| jvid福利写真一区二区三区| 日本精品视频一区二区三区| 欧美午夜一区二区三区免费大片| 欧美日本韩国一区| 久久久精品欧美丰满| 国产精品素人一区二区| 亚洲免费在线播放| 日本亚洲电影天堂| 丁香一区二区三区| 91免费国产在线| 欧美一区二区精品在线| 国产色产综合产在线视频| 亚洲色图欧洲色图| 日本成人超碰在线观看| 国产高清成人在线| 欧美午夜片在线观看| xf在线a精品一区二区视频网站| 国产精品每日更新| 青青草97国产精品免费观看无弹窗版| 国产黄人亚洲片| 欧美丝袜自拍制服另类| 久久久精品综合| 亚洲成av人影院在线观看网| 国产毛片精品视频| 欧美日韩免费不卡视频一区二区三区| 欧美精品一区二区三区蜜桃视频| 亚洲四区在线观看| 紧缚捆绑精品一区二区| 欧美丝袜自拍制服另类| 久久久久久久久一| 亚洲一区二区三区在线| 国产99久久久国产精品| 51午夜精品国产| 亚洲视频精选在线| 黑人巨大精品欧美一区| 欧美日韩卡一卡二| 国产精品国产自产拍高清av| 久久成人麻豆午夜电影| 欧洲一区二区三区免费视频| 中文字幕免费一区| 欧美精品在线一区二区| 国产片一区二区| 国产在线日韩欧美| 正在播放亚洲一区| 一区二区高清在线| 99精品视频在线免费观看| 精品国产在天天线2019| 视频在线观看一区| 欧美综合一区二区| 亚洲视频一区二区免费在线观看| 国产精品一区二区黑丝| 亚洲精品一区二区在线观看| 天天操天天干天天综合网| 色综合色狠狠天天综合色| 国产精品久久久久久久久快鸭| 国产成人在线看| 久久久国际精品| 国内欧美视频一区二区| 亚洲精品一区二区在线观看| 久久精工是国产品牌吗| 精品欧美乱码久久久久久| 久久国产精品免费| 欧美大片在线观看一区| 久久精品久久精品| 欧美videossexotv100| 六月婷婷色综合| 精品国产在天天线2019| 黄色资源网久久资源365| 精品国产一区二区在线观看| 精品一区二区三区av| 精品国产免费一区二区三区四区 | 欧美日韩一区久久| 亚洲图片欧美综合| 6080亚洲精品一区二区| 美脚の诱脚舐め脚责91| 久久久美女艺术照精彩视频福利播放| 国产一区二区福利视频| 国产精品久久国产精麻豆99网站 |