前端 | 2. 正則
作者部落格:清自以敬
歡迎任何形式轉載,但請務必註明出處。
筆者會隨時更正文章內容,但由於筆者水平有限,如果文章或程式碼有錯誤或者表述不當之處,還望不吝賜教。
文章中的錯誤筆記連結
- 如連結筆記出現
頁面丟失
,則筆記一般為私密狀態,完善ing,完善後會公開,還望見諒。- 如連結筆記是一個
錯誤連結或者空連結
,可以評論區回覆一下,筆者會修正連結。
1.轉義
轉義的作用:
當某個字元在表示式中具有特殊含義,例如字串引號中出現了引號,為了可以使用這些字元本身,而不是使用其在表示式中的特殊含義,則需要通過轉義符“\”來構建該字元轉義字元以正常使用。
規定的轉義字元表:
- 紅框之上的字元還有“\0”都是非列印控制字元
- 對於轉義符""的出現,都是具有特殊含義的,表示轉義符,所以轉義字元表對此規定了轉義字元\。
最後的倆個形式則是為了表示ascii範圍內其他字元,以便特殊表示式的使用,例如對正則字元組中的^(脫字元),可以以\x5e表示
2.正規表示式初步
正則作用:規定了字串的組成規則,通過其匹配模式對目標字串進行匹配字元或位置。
2.1.匹配字元
正規表示式對字元的匹配,形象點就是橫向匹配和縱向匹配這兩個方式。
縱向就像密碼鎖一個播輪(例如字元組),橫向就像選擇播輪個數(例如量詞)
2.1.1.組成元素
字面量:正常的字元,用來精準匹配一個具體字元
字元組:
匹配一個符合方括號內邏輯的內的字元。
邏輯符號:^(非)、- (區間或)、直接拼接(或)。
案例:
1,[ac]
:匹配元素==(a||c)
2,[^ac]
:匹配元素!=(a&&c)
- 方括號內開頭的^才被認為是邏輯判斷符號,其他位置都會被認為是字元元素
3, [a-c]
:匹配元素==(a||b||c)
4,[0-2]
:匹配元素==(0||1||2)
5,[02]
:匹配元素==(0||2)
允許在方括號內進行拼接以擴大範圍,例如[a-zA-Z0-9_],即匹配字母或者數字或者下劃線
如果要匹配邏輯符號,則需要使用其轉義字元,或者破壞組合順序,比如
[az^]
一些常見的簡寫形式:
\d
:[0-9]
d :digit(數字)
大寫的\D則表示非數字[^0-9]
\w
:[a-zA-Z0-9\_]
w:word(單詞)
大寫的\W則表示非單詞[^a-zA-Z0-9\_]
\s
:[ \t\v\r\n\f]
。
大寫S表示非空白
s:space(空白)。表示空格、水平製表、垂直製表、回車(return,回到行首)、換行(newline,新行)、換頁(form feed,表單).
:[^\n\r\u2028\u2029]
。匹配除了換行符(\r\n)
合行結束符(\u2028\u2029)
組合上述即可得到萬用字元,如
[\d\D]
。[^]
也表示萬用字元,不對任何字元做非操作自然就是任意字元。
量詞
匹配字元X的出現次數。量詞符號:?、+、*、{}
檢查模式:
1,貪婪型:儘可能多的檢查
-
X?
:0||1?可認為是詢問問有還是沒有
-
X+
:>=1 -
X*
:>=0 -
X{n}
:==n -
X{n,}
:>=n -
X{n,m}
:[n,m]
2,懶惰型:儘可能少的檢查
- 貪婪型基礎上多加個?即可。可理解為有沒有瞅到?瞅到就繼續走。
分支:
(p1|p2|…|pn),“|”表示分支,短路或
進行匹配一個p,匹配到了一個就結束匹配。
"()"就是括號的作用。即標識整體
2.1.2.基礎正則的設計
分析值的構成情況,選擇縱向播輪範圍(字元組),選擇播輪個數(量詞),有必要再補上分支結構。
案例:
1,篩選可構成十六進位制色碼的部分:
- #字面量,字元組為[0-9a-fA-F],3位或6位
- #([0-9a-fA-F]{3}|[0-9a-fA-F]{6})
2,篩選可構成時分制時間的部分(24小時):
- 4個位數字字元組和一個字面量“:”
- 小時部分取值為0-24,([0-1]\d|2[0-3])
- 分鐘為0-59,[0-5]\d
- 結果:([0-1]\d|2[0-3]):[0-5]\d
如果對於例如01這樣的,允許只出現1,可以將0位選擇量詞"?"
即:(0?[0-9]|1[0-9]|2[0-3]):(0?\d|[1-5]\d)
3,篩選可構成年月日日期的部分(-連線):
- 年4位字元組、月1位或2位字元組、日1為或2位字元組,字面量“-”連線。
- 年:\d{4}
- 月:(0?\d|1[0-2])
- 日:(0?\d|[12]\d|3[01])
4,篩選可組成windows下絕對路徑的部分:
- 碟符字元組,1位字元組和字面量":",[a-zA-Z]:\\
- 分隔符轉義
\\
- 目錄層級剔除非法字元,貪婪型長度大於1,個數>=1。
([^\\/:*?"<>|\s \u2088\u2029]+\\)*
- 最終目標可能是個檔案,也可能是資料夾
([^\/:*?"<>|\s \u2088\u2029]+)?
相關文章
- 前端技術分享:JavaScript正則全面解析前端JavaScript
- js表情正則 手機正則 郵箱正則JS
- 前端 - 開發中常用的正則校驗前端
- 正則
- 前端如何理解正則-由淺入深的學習前端
- 長沙前端培訓班分享:JavaScript正則全面解析前端JavaScript
- Javascript正則JavaScript
- 正則re
- 2.物件導向設計原則物件
- 正則匹配規則2
- 2022前端必用⭐正則大全, 請?提前收好.前端
- Logstash之Grok正則匹配,讓正則進階!
- Java處理正則匹配卡死(正則回溯問題)Java
- javascript 常用正則JavaScript
- 正則筆記筆記
- 「python」正則Python
- 正則-元字元字元
- 正則語法
- 正則經驗
- 正則雜談
- 機器學習之稀疏性正則化:L1 正則化機器學習
- 機器學習之簡化正則化:L2 正則化機器學習
- 「機器學習速成」稀疏性正則化:L1正則化機器學習
- Shell階段09 shell正則,grep正則, sed使用及案例
- 筆記bs,正則筆記
- 正則 (入門篇)
- 徹底理解正則
- JavaScript正則爬坑JavaScript
- java正則反向引用Java
- JS 正則學習JS
- 正則化詳解
- Python正則部分Python
- PHP 正則匹配中文PHP
- iOS正則判斷iOS
- java 正則舉例Java
- 正則命令積累
- 正則表達工具
- 正則特殊引數