給定的字串是否符合正規表示式的過濾邏輯(稱作「匹配」);
可以通過正規表示式,從字串中獲取我們想要的特定部分。
比如有字串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引擎! 兩種引擎各有所長,而真正的引用則取決與你的需要以及所使用的語言!
\ 轉義字元
^ 以..開頭
$ 以..結尾
* 至少出現0次
+ 至少出現1次
? 至少出現0次,至多出現1次
出現次數大於等於n,小於等於m
n+? 貪婪模式匹配多個n(至少1個)
n*? 貪婪模式匹配多個n(至少0個)
. 匹配非\r\n的字元,與\w\w等價
\b 匹配邊界
\d 匹配數字[0-9]
\w 匹配任何單詞
\s 匹配不可見字元,等價於 \f\n\r\t\v
[^] 非..字元
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...