01.01 正則之什麼是匹配模式(VIP)
注:紫貓實現正則的是使用的紫貓插件的正則功能
https://zimaoxy.com/m/post/zm.about/
lua自身的正則介紹(因爲我們案桌下的插件都是lua的 所以)
- lua的正則和常規正則的寫法不同 無法直接使用其他正則表達式
本節課沒說什麼只是簡單的使用了一個例子來演示下正則的用法
01.02 正則之匹配數字(VIP)
12312
Lua自身的正則介紹
https://zimaoxy.com/m/post/pattern-matching/
小知識:控制字符的介紹
在ASCII碼中,第0~31號及第127號(共33個)是控制字符或通訊專用字符,如控制符:LF(換行)、CR(回車)、FF(換頁)、DEL(刪除)、BS(退格)、BEL(振鈴)等;通訊專用字符:SOH(文頭)、EOT(文尾)、ACK(確認)等
小知識:正則匹配的一個小原理
例子 "QQ:3423423434"
正則表達式:"%d%d" 意思是匹配2個連續的數字
我原來理解的是 會匹配出 34 42 23 34 42 23 34 43 34
但是按照匹配流程原理看 實際上 首先匹配出了34 把34這個提取出來 然後會繼續匹配34之後又無符合要求的 而不是從34那裏繼續找
小知識:如果單獨使用* 這種數量爲0的字符 因爲他的數量表示0個到多個 所以返回結果很多時候都是 會造成卡在這裏無限卡 所以這樣類似的寫法千萬要小心 主要這種可以表示數量爲0的字符 單獨使用的時候千萬小心
01.03 正則之匹配字母標點空白等內容(VIP)
1這節課主要內容在於轉義字符
小知識:正則表達式的轉義字符 在正則裏面有特殊含義的一些字符 如果出現在正則表達式裏面 如何保證讓正則認爲他是一個普通字符而不是一個具有特殊意義的正則符號呢 前面加上%即可
常見的在正則中有特殊含義的字符列表下:
小知識:@屬於標點符號 所以屬於%p
小知識:瞭解 %aà字母 %dà數字 %s空白字符 %w字母數字 %s空白符(注意大小寫 目前是都小寫 但是如果把這些小寫變爲大寫 那麼久變成了反向的範圍) 目前沒有漢字的匹配
小知識:匹配內容存在中文的出現的問題 亂碼
一箇中文正常而言是3個字符 如果我們用。來匹配 那麼會出現問題
01.04 正則之匹配集合(VIP)
小知識:[]的用法的注意事項
1.[]裏面 可以加入上面所說的正則字符串 比如[%d%a] 這樣的結構 但是 如果裏面寫入. [.] 這裏面的.就代表字符.它本身 注意-也是一樣 [0-7-] 這個就表示0到7的數值和一個-字符
2.[^%d]這個給了一個例子提取出emial地址 很有參考意義
3[com|net|cn] 也有這種操作
4[0-7] [a-z] 表示一個範圍內的數字或者字母
01.05 正則之貪婪與懶惰匹配(VIP)
34534
這裏和電腦上的不大一樣 和一般的正則也不大一樣
單個字符類跟一個 '*', 將匹配零或多個該類的字符。 這個條目總是匹配儘可能長的串(貪婪匹配)
單個字符類跟一個 '+', 將匹配一或更多個該類的字符。 這個條目總是匹配儘可能長的串(貪婪匹配);
單個字符類跟一個 '-', 將匹配零或更多個該類的字符。 和 '*' 不同, 這個條目總是匹配儘可能短的串(懶惰匹配 唯一的懶惰匹配);
單個字符類跟一個 '?', 將匹配零或一個該類的字符。 只要有可能,它會匹配一個;(注意這個不是貪婪匹配 只是匹配0個1個 而且傾向於先匹配1個)
注:只有-是懶惰匹配 * +都是貪婪匹配 ?是特殊的一種匹配 不屬於前面的任何一種 而且和正常正則的用法不同的 注意
例子:內容="個人QQ:23434234,序列號34234-6564 等待測試下"
要取出裏面的QQ號和 尋列號
[%d%-]+
例子 匹配出某個email
有2個@
(1)匹配出第一個@前的位置的內容 [%d]
01.06 正則之平衡匹配(VIP)
5345
%n, 這裏的 n 可以從 1 到 9; 這個條目匹配一個等於 n 號捕獲物(後面有描述)的子串。
%bxy, 這裏的 x 和 y 是兩個明確的字符; 這個條目匹配以 x 開始 y 結束, 且其中 x 和 y 保持 平衡 的字符串。 意思是,如果從左到右讀這個字符串,對每次讀到一個 x 就 +1 ,讀到一個 y 就 -1, 最終結束處的那個 y 是第一個記數到 0 的 y。 舉個例子,條目 %b() 可以匹配到括號平衡的表達式。
%bxy 其實就是設置開始和結束的字符串 來匹配出符合要求的東西 而且是要求取到的字符串內 開頭字符和結束字符的數量是一致的
內容="我的QQ:(4534534),其他信息再說"
可以直接%b() 作爲正則字符串來匹配即可 可以匹配出(4534534)
注:這個Xy只能是 一個字符 不能是漢字 因爲漢字佔用3個字節
注意:這個用法限制很大 你寫好了開始和結束字符後 內部無法再增加更多的匹配
Dim s = "(紫貓老師QQ:(345911220), ddddd)+Email:345911@(220)@qq.com"
TracePrint "000"
Dim data = zm.RegExMatch(s, "%b()")
結果 只能找第一層的符合要求的
當前腳本第10行:(紫貓老師QQ:(345911220), ddddd)
當前腳本第10行:(220)
01.07 正則之邊界匹配(VIP)
%f[set], 指 邊境模式; 這個條目會匹配到一個位於 set 內某個字符之前的一個空串, 且這個位置的前一個字符不屬於 set 。 集合 set 的含義如前面所述。 匹配出的那個空串之開始和結束點的計算就看成該處有個字符 '\0' 一樣。