或 | 的小細節替換匹配 | 任一側最大的表示式
2.正規表示式和相應編碼
3.正規表示式引擎舉例簡單說明nfa與dfa工作的區別:
比如有字串this is yansen』s blog,正規表示式為 /ya(msen|nsen|nsem)/ (不要在乎表示式怎麼樣,這裡只是為了說明引擎間的工作區別)。 nfa工作方式如下,先在字串中查詢 y 然後匹配其後是否為 a ,如果是 a 則繼續,查詢其後是否為 m 如果不是則匹配其後是否為 n (此時淘汰msen選擇支)。然後繼續看其後是否依次為 s,e,接著測試是否為 n ,是 n 則匹配成功,不是則測試是否為 m 。為什麼是 m ?因為 nfa 工作方式是以正規表示式為標準,反覆測試字串,這樣同樣乙個字串有可能被反覆測試了很多次!
而dfa則不是如此,dfa會從 this 中 t 開始依次查詢 y,定位到 y ,已知其後為a,則檢視表示式是否有 a ,此處正好有a 。然後字串a 後為n ,dfa依次測試表示式,此時 msen 不符合要求淘汰。nsen 和 nsem 符合要求,然後dfa依次檢查字串,檢測到sen 中的 n 時只有nsen 分支符合,則匹配成功!
由此可以看出來,兩種引擎的工作方式完全不同,乙個(nfa)以表示式為主導,乙個(dfa)以文字為主導!一般而論,dfa引擎則搜尋更快一些!但是nfa以表示式為主導,反而更容易操縱,因此一般程式設計師更偏愛nfa引擎! 兩種引擎各有所長,而真正的引用則取決與你的需要以及所使用的語言。
4.正規表示式的一些解釋
5.正規表示式非獲取匹配
[外鏈轉存失敗(img-gzwpz4op-1563333893566)(en-resource://database/3209:0)]
6.正規表示式正向預查和反向預查(不消耗字元)期望後面是什麼,期望前面應該是什麼
預查也就是說只匹配符合子模式的字元,(子模式,不作為匹配結果),,子模式是非獲取匹配
正規表示式高階
捕獲組就是把正規表示式中子表示式匹配的內容,儲存到記憶體中以數字編號或手動命名的組裡,以供後面引用。表示式 說明 expression 普通捕獲組,將子表示式expression匹配的內容儲存到以數字編號的組裡 expression 命名捕獲組,將子表示式expression匹配的內容儲存到以nam...
正規表示式高階話題
1.表示式的遞迴匹配 有時候,我們需要用正規表示式來分析乙個計算式中的括號配對情況。比如,使用表示式 或者 可以匹配一對小括號。但是如果括號 內還嵌有一層括號的話 如 則這種寫法將不能夠匹配正確,得到的結果是 類似情況的還有 html 中支援巢狀的標籤如 等。本節將要討論的是,想辦法把有巢狀的的成對...
grep正規表示式 高階
正規表示式只是字串的一種描述,只有和支援正規表示式的工具相結合才能進行字串處理。本文以grep為例來講解正規表示式。grep命令 功能 輸入檔案的每一行中查詢字串。基本用法 grep acinv color auto a n b n 搜尋字串 檔名 引數說明 a 將二進位制文件以文字方式處理 c 顯...