成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

正則表達式之回溯

關于“回溯”我也是第一次接觸,對它也不算很了解。下面就把我所了解的做為一個心德記錄下來,以備查看。

我們所使用的正則表達式的匹配基礎大概分為:優先選擇最左端(最靠開頭)的匹配結果和標準的匹配量詞(*、+、?和{m, n})是匹配優先的。

“優先選擇最左端的匹配”顧名思義就是從字符串的起始位置開始匹配直到匹配結束這是基礎;“標準匹配量詞”又分為“非確定型有窮自動機(NFA)”也可以叫做“表達式主導”;另外一種是“確定型有窮自動機(DFA)”也可以叫做“文本主導”。我們目前在JavaScript中所使用的正則表達式為“表達式主導”。表達式主導和文本主導解釋起來有些麻煩,先看來一個例子可能會清楚些。

復制代碼 代碼如下:
// 使用正則表達式匹配文本
var reg = /to(nite|knight|night)/;
var str = ‘doing tonight’;
reg.test(str);

在上面的這個例子中,第一個元素[t],它將會重復嘗試,直到目標字符串中找到‘t’為止。之后,就檢查緊隨其后的字符是否能由[o]匹配,如果能,就檢查下面的元素(nite|knight|night)。它的真正含義是“nite”或者“knight”或者“night”。引擎會依次嘗試這3種可能。嘗試[nite]的過程是先嘗試[n],然后[i],然后[t],最后是[e]。如果這種嘗試失敗,引擎會嘗試另一種可能,如此繼續下去,直到匹配成功或是報告失敗。表達式中的控制權在不同的元素之間轉換,所以稱為“表達式主導”。

    同樣是上面的例子“文本主導”在掃描字符串時,會記錄當前有效的所有匹配可。當引擎移動到t時,它會在當前處理的匹配可能中添加一個潛在的可能:

字符串中的位置 正則表達中的位置
……doing tonight 可能的匹配位置:/to(nite|knight|nigth)/

 

接下來掃描的每個字符,都會更新當前的可能匹配序列。繼續掃描兩個字符以后的情況是:

 

字符串中的位置 正則表達中的位置
……doing tonight 可能的匹配位置:/to(nite|knight|nigth)/

 

有效的可能匹配變為兩個(knight被淘汰出局)。掃描到g時,就只剩下一個可能匹配了。當h和t匹配完成后,引擎發現匹配已經完成,報告成功。“文本主導”是因為它掃描的字符串中的每個字符都對引擎進行了控制。

    如果想要弄明白“表達式主導”是如何工作的,那就要看一下我們今天的主題“回溯(backtracking)”。回溯就像是在走岔路口,當遇到岔路的時候就先在每個路口做一個標記。如果走了死路,就可以照原路返回,直到遇見之前所做過的標記,標記著還未嘗試過的道路。如果那條路也走不能,可以繼續返回,找到下一個標記,如此重復,直到找到出路,或者直到完成所有沒有嘗試過的路。

    在許多情況下,正則引擎必須在兩個(或更多)選項中做出選擇。當遇到/……x?……/時,引擎必須是否嘗試匹配X。對于/……X+……/的情況,毫無疑問,X至少嘗試匹配一次――因為加號要求必須匹配至少一次。第一個X匹配之后,此要求已經滿足,需要決定是否嘗試下一個X。如果決定進行,還要決定是否匹配第三個X,第四個X,如此繼續。每次選擇,其實就是做一個標記,用于提示此處還有另一個可能的選擇,保留起來以備用。在回溯的過程中要考慮兩個要點:哪個分支應當首先選擇?回溯的時候使用的是哪個(或者是哪些個)之前保存的分支?

    第一個問題是按下面這條重要原則來選擇的:

        如果需要在“進行嘗試”和“路過嘗試”之間選擇,對于匹配優先量詞,引擎會優先選擇“進行嘗試”,而對于忽略優先量詞,會選擇“路過嘗試”。

    第二個問題是按以下這條原則:

        距離當前最近儲存的選項就是當本地失敗強制回溯時返回的。使用的原則是LIFO(last in first out,后進先出)。

    我們先來看幾個在道路中做標記的例子:

        1、未進行回溯的匹配

            用[ab?c]來匹配“abc”。[a]匹配之后,匹配的當前狀態如下:

“abc” ab?c

            現在輪到[b?]了,正則引擎需要決定:是需要嘗試[b]呢,還是跳過?因為[?]是匹配優先的,它會嘗試匹配。但是,為了確保在這個嘗試最終失敗之后能夠恢復,引擎會把:

“abc” ab?c

            添加到備用狀態序列中。也就是說,稍后引擎可能從下面的位置繼續匹配:從正則表達式中的[b?]之后,字符串的c之前(也就是說當前的位置)匹配。這實際上就是跳過[b]的匹配,而問題容許這樣做。引擎做好標記后,就會繼續向前檢查[b]。在示例中,它能夠匹配,所以新的當前狀態變為:

“abc” ab?c

            最終的[c]也能成功匹配,所以整個匹配完成。備用狀態不再需要了,所以不再保存它們。

        2、進行了回溯的匹配

            下面要匹配的文本是“ac”,在嘗試[b]之前,一切都與之前的過程相同。顯然,這次[b]無法匹配。也就是說,對[……?]進行嘗試的路走不通了。因為有一個備用狀態,這個“局部匹配失敗”產工會導致整體匹配失敗。引擎會進行回溯,也就是說,把“當前狀態”切換為最近保存的狀態。

“ac” ab?c

            在[b]嘗試之前保存的尚未嘗試的選項。這時候,[c]可以匹配c,所以整個匹配宣告完成。

        3、不成功的匹配

            現在要匹配的文本是“abx”。在嘗試[b]以前,因為存在問號,保存了這個備用狀態:

“abx” ab?c

            [b]能夠匹配,但這條路往下卻走不通了,因為[c]無法匹配x。于是引擎會回溯到之前的狀態,“交還”b給[c]來匹配。顯然,這次測試也失敗了。如果還有其他保存的狀態,回溯會繼續進行,但是此時不存在其他狀態,在字符串中當前位置開始的整個匹配也就宣告失敗。

    目前對正則表達式的回溯只能理解這么多,以后我再慢慢補充吧!

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
国精产品W灬源码1688网站| 国色天香卡一卡二乱码| 国产精品无码翘臀在线看| 国产亚洲AV浪潮A∨尹人Av| 精品第一国产综合精品AⅤ| 久久精品国产色蜜蜜麻豆| 美日韩一区二区三区| 欧美性爱乱伦视频| 少女たちよ在线观看动漫4集免费| 无码人妻精品一区二区蜜桃AV| 亚洲AV永久无码精品一区二区不| 亚洲中文字幕无码一区无广告 | 久久精品国产亚洲AV麻豆小说| 烂货我捏烂你的奶| 人妻AV中文字幕一区二区三区| 少妇夜夜爽夜夜春夜夜高潮 | 自拍偷自拍亚洲精品被多人伦好爽| JAPANESE五十路熟妇| 国产GAYSEXCHINA男同| 几天没C是不是又痒了网站| 乱中年女人伦AV三区| 日本一线产区和韩国二线产区区别| 午夜成人亚洲理伦片在线观看| 野花社区在线观看免费直播WWW| JEALOUSVUE成熟少归| 国产精品午夜福利不卡| 久久久久久精品天堂无码中文字幕 | 无人区一码卡二卡三乱码| 亚洲欧美V国产蜜芽TV| 99RE8这里有精品热视频| 国产AV无码专区亚洲AWWW| 精品国产亚洲AV麻豆尤物| 女神被啪进深处娇喘在线观看| 少妇ASS浓PICSXXXXB| 亚洲乱亚洲乱妇24P| FREEHDⅩXXXXSEX| 国产伦精品一区二区三区免.费| 久久人妻无码中文字幕| 日韩少妇内射免费播放| 亚洲国产天堂久久综合网| AV无码久久久精品免费| 国产成人无码AⅤ片在线观看你| 精品国精品无码自拍自在线| 欧洲无人区码SUV| 亚洲AV成人无码精品网站色欲| 中中文日产幕无线码一区| 公侵犯人妻一区二区三区四区 | 国产免费AV片在线观看麻豆| 蜜臀av无码少妇一区二区三区| 四虎影视永久地址WWW成人| 亚洲人成人网站在线观看| 白嫩无码人妻丰满熟妇啪啪区百度| 国产一区二区三区导航| 欧美与黑人午夜性猛交久久久| 亚洲AV无码精品网站| XXXXX性BBBBB欧美| 精品人亚洲成A人片在线观看无码专区| 欧洲女人牲交视频免费| 亚洲国产AV无码专区亚洲AVL| А√新版天堂资源在线BT| 精品BBBBB性ⅩXXXX少妇| 日本人妻人人人澡人人爽 | 拔萝卜视频免费播放在线观看| 鳮巴又大又爽我高潮了免费视频 | 不卡无在一区二区三区四区| 久久精品国产色蜜蜜麻豆| 熟婦久久无码人妻av蜜臀| 中国女人内射6XXXXX| 国产女人被狂躁到高潮小说| 欧美性受XXXX人人本视频| 亚洲色18禁成人网站WWW永久| 丰满少妇大力进入| 奶头又大又白喷奶水AV| 亚洲不乱码卡一卡二卡4卡5卡| 边做边爱完整版MP3在线下载| 久久精品女同亚洲女同| 无码精品A∨在线观看| JK制服白丝自慰无码自慰网站| 中文字幕一区二区三区精彩视频| 国产精品国产三级国产AV中文| 女人18毛片A级毛片视频| 亚洲AV无码一区二区三区大黄瓜| 无码人妻精品一区二区桃蜜| 无码人妻精品一区二区三 | 少妇被粗大的猛烈进出69影院| 岳故意装睡让我挺进去的电影| 国产一国产二国产三国产四国产五| 人人妻人人澡人人爽人人精品| 野兽的夜晚第四季忘不掉的前任| 国产香蕉一区二区三区在线视频| 日韩久久一区二区三区蜜桃| 51被公侵犯玩弄漂亮人妻| 精品成人AV一区二区三区| 乌克兰少妇XXXX做受野外| 差差差很疼无掩盖在线观看| 蜜臀AⅤ永久无码精品| 亚洲精选无码久久久| 国产男男Gay做受ⅩXX高潮| 上面一个摸下面一个手念什么| www.av无码| 男人女人做爽爽18禁网站| 野花日本免费完整版高清版| 精产国品一二三产品区别视频手机 | 高清人人天天夜夜曰狠狠狠狠| 欧美国产日韩A在线观看| 曰韩少妇内射免费播放| 精品人妻少妇AV一区二区三区| 亚洲AV成人噜噜无码网站| 国产精品18HDXXXⅩ| 搡老女人老熟妇HHD| XX性欧美肥妇精品久久久久久| 嫩草国产福利视频一区二区| 在教室伦流澡到高潮H强圩电影 | 精品韩国亚洲AV无码不卡区| 性少妇JEAⅠOUSVU片| 国产精品无码素人福利| 无码AV一区二区三区不卡| 国产VA免费精品观看精品 | 欧美日韩精品视频一区二区三区| 中文字幕一线产区和二线| 美人电影在线观看| 中文字幕人妻中文AV不卡专区| 局长趴在雪白的身上耸动| 正在播放老肥熟妇露脸| 美女把尿口扒开让男人桶| 真人一进一出抽搐GIF免费动图| 久久亚洲男人第一AV网站| 一二三四在线观看视频韩国 | 99精品国产在热久久无毒不卡| 女人扒开屁股桶爽30分钟| 99在线精品国自产拍| 欧美日韩视频在线第一区| ZOOM另一类ZZO0| 日本亚欧乱色视频免费观看| 粗大挺进尤物人妻中文字幕| 少妇高潮喷水惨叫久久久久电影| 高潮动态图啪啪吃奶图动态| 天天想你在线视频免费观看高清版| 国产精品久久久久无码AV | 999国产精品999久久久久久| 欧美人与动牲交A欧美精品| JK女自慰下面爆浆喷水| 日本适合18岁以上的护肤品| 动漫精品中文无码卡通动漫| 天天想你免费看西瓜视频| 国产人无码A在线西瓜影音| 亚洲AV中文无码乱人伦在线视色| 精产国品一二三产品区别大吗| 亚洲熟妇无码AV在线少妇| 快拨出去我是你老师啊作文| 中文字幕在线亚洲日韩6页| 秋霞电影院yy2933| 高清国产天干天干天干| 亚洲AV日韩精品一区二区三区| 精品久久久久久久久午夜福利| 一区二三区在线 | 中国| 女人高潮娇喘抽搐喷水动态视频| А√天堂资源在线官网| 少妇性活BBBBBBBBB四川| 国产精品无码素人福利| 亚洲日韩AV片在线观看| 美女直播全婐APP免费| 把腿张开老子cao烂你在线视频 | 日韩AV无卡无码午夜观看| 国产精品18久久久久久不卡| 亚洲国产AV一区二区三区四区| 久久亚洲精品成人无码| 啊灬啊灬啊灬快灬深视频无遮掩| 睡美人免费观看完整版西瓜| 好吊妞人成视频在线观看强行 | 亚洲一区二区三区乱码AⅤ蜜桃女| 免费无码鲁丝片一区二区| 粗大的内捧猛烈进出无码| 亚洲 都市 无码 校园 激情| JαPαηeseHD熟女熟妇伦| 色噜噜狠狠色综合AV| 激情 小说 亚洲 图片 伦| 696969大但人文艺术来源| 少女たちよ在线观看完整版动漫| 含羞草传媒免费进入APP老版本| 中文乱码35页在线观看| 色偷偷色噜噜狠狠网站30根| 妓女妓女影院妓女影库妓女网| 337P日本欧洲亚洲大胆裸体艺| 少妇饥渴XXHD麻豆XXHD?| 狠狠色婷婷久久综合频道毛片 | 国产无套乱子伦精彩是白视频| 夜夜爽77777妓女免费看| 日本AⅤ精品一区二区三区久久| 国产亚洲精品无码成人| 性欧美老妇人XXⅩ000| 久久99老妇伦国产熟女高清 | 一本色道久久综合狠狠躁| 人人人爽人人澡人人高潮| 国产专区国产AV| FREE紧VIDEOXX粗又长| 亚洲AV无码专区亚洲AV| 欧美日韩久久中文字幕| 黑人巨茎大战白人女40CM| 爆乳大森しずか无码|