目錄傳統nfa優化
優化2:將文字獨立出來
優化3:將錨點獨立出來
優化4:模擬開頭字元識別
優化5:使用固化分組和占有優先量詞
優化6:消除迴圈
傳統型nfa支援忽略優先量詞
dfa不支援捕獲型括號和回溯
優先選擇最左端的匹配結果
標準的匹配量詞是匹配優先的
「|「多選結構按序排列,合理安排次序,減少回溯次數。將最有可能匹配的分支放在最前面,可以減少nfa引擎的回溯次數。
例項 匹配含轉義的字串
"2\"x3\" likeness"
正規表示式"(\\.|[^"\\])*"
優化"([^"\\]|\\.)*"
引擎可能優化文字文字。
x+ ---> xx*
- ---> ------
(?:this|that) ---> th(?:is|at)
引擎可能優化錨點。
^abc|^123 ---> ^(?:abc|123)
(^abc) ---> ^(abc)
abc$|123$ ---> (?:abc|123)$
[jfmasond](?:(?<=j)an|(?<=f)eb|...|(?<=d)ec)
^[^:]+: ---> ^(?>[^:]+): or ^[^:]++:
(this|that|...)* ---> * 代表的意義
方法一:依據經驗
例子
"he said \"hi there\" and left"
正規表示式"[^\\"]+\\.[^\\"]+\\.[^\\"]+"
"[^\\"]*(\\.[^\\"]*)*"
模式normal+(special normal+)*
消除迴圈opening normal* (special normal*)* closing
避免無休止匹配的重點
special部分和normal部分匹配的開頭不能重合
normal部分至少匹配乙個字元
special部分必須固化
正規表示式學習
概念 正規表示式,就是用某種模式去匹配一類字串的乙個公式。基礎 下表列出了所有的元字元和對它們的乙個簡短的描述。簡單例子 vi 命令作用 s g 把乙個或者多個空格替換為乙個空格 s 去掉行尾的所有空格 s 在每一行頭上加入乙個空格 s 0 9 0 9 去掉行首的所有數字字元 s b aeio g ...
正規表示式學習
1.元字元 1 匹配任何單個字元 2 匹配括號中的任何乙個字元 可以再括號中使用連字元 來指定子都的區間來簡化表示,如a 0123456789 c等價於a 0 9 c 3 將 之間括起來的表示式定義為 組 4 將兩個匹配條件進行邏輯 或 運算 z f ood則匹配 zood 或 food 5 匹配0...
正規表示式學習
只是點皮毛,先湊合用著了,順便鄙視一下sqlserver,居然不支援正則。b 元字元,代表著單詞的開頭或結尾,也就是單詞的分界處。d 數字 s 任意的空白符,包括空格,製表符 tab 換行符,中文全形空格等 w 字母或數字或下劃線或漢字等 匹配字串的開始 匹配字串的結束 轉義符 除換行符以外的任意字...