首頁 > 軟體

正規表示式基礎學習一文入門

2023-03-23 22:03:21

正規表示式是什麼

校驗資料的有效性、查詢符合要求的文字以及對文字進行切割和替換等操作。正規表示式的目的是真正的強大之處就在於可以查詢符合某個規則的文字。

元字元

1.特殊字串

  • . 除換行符外任意字元
  • d 表示任意單個數位
  • w 表示任意單個數位或字母或下劃線
  • s 表示任意單個空白符

D W S,意思正相反。

2.空白符

  • r 回車符
  • n 換行符
  • f 換頁符
  • t 製表符
  • v 垂直製表符
  • s 任意空白符

3.量詞

  • * 代表0次到多次
  • + 1次到多次
  • ? 0到1次
  • {m} 出現m次
  • {m,} 出現至少m次
  • {m,n} m到n次

4.範圍

  • |或 ,如ab|bc代表ab或bc
  • [...] 多選一,括號中任意單個元素
  • [a-z] 匹配a-z之間任意單個元素
  • [^..] 取反,不能包括括號中的任意單個元素

貪婪匹配、非貪婪匹配和獨佔模式

  • 貪婪模式的特點就是儘可能進行最大長度匹配
  • 非貪婪模式會盡可能短地去匹配。
  • 獨佔模式和貪婪模式很像,獨佔模式會盡可能多地去匹配,如果匹配失敗就結束,不會進行回溯,這樣的話就比較節省時間。具體的方法就是在量詞後面加上加號(+),例如xy{1,3}+yz

注意: Python 和 Go 的標準庫目前都不支援獨佔模式。

(“.+?”)|w{2,6}

分組和參照

如圖所示的正則,將日期和時間都括號括起來。這個正則中一共有兩個分組,日期是第 1 個,時間是第 2 個。

1.不儲存子組

分組的作用就是後續可能還會被參照到,但是如果不需要參照的時候可以新增不儲存子組,表示式(?:xxx),優點是正則效能會更好,在子組計數時也更不容易出錯。

2.括號巢狀

四種匹配模式

1.不區分大小寫模式(Case-Insensitive)

不區分大小寫模式,正規表示式(?i)cat,這樣匹配的字元就不區分大小寫了

如果我們想要前面匹配上的結果,和第二次重複時的大小寫一致,那該怎麼做呢?我們只需要用括號把修飾符和正則 cat 部分括起來,加括號相當於作用範圍的限定,讓不區分大小寫只作用於這個括號裡的內容。正規表示式((?i)cat)

2.點號通配模式(Dot All)

元字元裡講.可以匹配除了換行以外的任何元素,用單行模式中使用.,正則表示式(?s).

3.多行匹配模式

多行模式的表示式(?m)^...|...$,這樣的匹配好處是每一行

4.註釋模式

略...

斷言

斷言是指對匹配到的文字位置有要求。

1.單詞邊界

在準確匹配單詞時,我們使用 b...b 就可以實現了,也可以指定表示式的開頭和結尾^...$

2.環視

環視的主要是定義清晰的邊界。

  • (?<=Y),左邊是Y
  • (?<=!Y),左邊不是Y
  • (?=Y),右邊是Y
  • (?!Y),右邊不是Y

左尖括號代表看左邊,沒有尖括號是看右邊,感嘆號是非的意思。

常用正則Demo

正規表示式用於字串處理、表單驗證等場合,實用高效。現將一些常用的表示式收集於此,以備不時之需。

  • 匹配中文字元的正規表示式: [u4e00-u9fa5]
  • 匹配雙位元組字元(包括漢字在內):[^x00-xff]
  • 匹配空白行的正規表示式:ns*r
  • 匹配HTML標記的正規表示式:<(S*?)[^>]*>.*?|<.*? />
  • 匹配首尾空白字元的正規表示式:^s*|s*$
  • 匹配Email地址的正規表示式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
  • 匹配網址URL的正規表示式:[a-zA-z]+://[^s]*
  • 匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數位下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  • 匹配國內電話號碼:d{3}-d{8}|d{4}-d{7}( 匹配形式如 0511-4405222 或 021-87888822)
  • 匹配中國郵政編碼:[1-9]d{5}(?!d)
  • 匹配身份證:d{15}|d{18}

2.匹配特定數位:

  • 匹配正整數 ^[1-9]d*$ 
  • 匹配負整數 ^-[1-9]d*$
  • 匹配整數 ^-?[1-9]d*$
  • 匹配非負整數(正整數 + 0)^[1-9]d*|0$
  • 匹配非正整數(負整數 + 0)^-[1-9]d*|0$
  • 匹配正浮點數 ^[1-9]d*.d*|0.d*[1-9]d*$
  • 匹配負浮點數 ^-([1-9]d*.d*|0.d*[1-9]d*)$
  • 匹配浮點數 ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$
  • 匹配非負浮點數(正浮點數 +0) ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$
  • 匹配非正浮點數(負浮點數 + 0) ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$ 

3.匹配特定字串:

  • 匹配由26個英文字母組成的字串 ^[A-Za-z]+$
  • 匹配由26個英文字母的大寫組成的字串 ^[A-Z]+$ 
  • 匹配由26個英文字母的小寫組成的字串 ^[a-z]+$ 
  • 匹配由數位和26個英文字母組成的字串 ^[A-Za-z0-9]+$  
  • 匹配由數位、26個英文字母或者下劃線組成的字串 ^w+$  
  • 只能輸入數位:^[0-9]*$
  • 只能輸入n位的數位:^d{n}$
  • 只能輸入至少n位數位:^d{n,}$
  • 只能輸入m-n位的數位:^d{m,n}$
  • 只能輸入零和非零開頭的數位:^(0|[1-9][0-9]*)$
  • 只能輸入有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$
  • 只能輸入有1-3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$
  • 只能輸入非零的正整數:^+?[1-9][0-9]*$
  • 只能輸入非零的負整數:^-[1-9][0-9]*$
  • 只能輸入長度為3的字元:^.{3}$
  • 只能輸入由26個英文字母組成的字串:^[A-Za-z]+$
  • 只能輸入由26個大寫英文字母組成的字串:^[A-Z]+$
  • 只能輸入由26個小寫英文字母組成的字串:^[a-z]+$
  • 只能輸入由數位和26個英文字母組成的字串:^[A-Za-z0-9]+$
  • 只能輸入由數位、26個英文字母或者下劃線組成的字串:^w+$
  • 驗證使用者密碼:^[a-zA-Z]w{5,17}$正確格式為:以字母開頭,長度在6-18之間,
  • 只能包含字元、數位和下劃線。
  • 驗證是否含有^%&'',;=?"等字元:`[^%&'',;=?x22]+`
  • 只能輸入漢字:^[u4e00-u9fa5],{0,}$
  • 驗證Email地址:^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
  • 驗證InternetURL:^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$
  • 驗證電話號碼:^((d{3,4})|d{3,4}-)?d{7,8}$

以上就是正規表示式基礎學習一文入門的詳細內容,更多關於正規表示式基礎的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com