正規表示式學習 引擎

2022-08-15 16:06:21 字數 1220 閱讀 7122

目錄傳統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 字母或數字或下劃線或漢字等 匹配字串的開始 匹配字串的結束 轉義符 除換行符以外的任意字...