首頁 > 軟體

正規表示式基礎與常用驗證表示式

2022-06-14 22:01:36

一、正則元字元

是一些在正規表示式中有特殊用途、不代表它本身字元意義的一組字元。

1、 字元元字元

  • […] :匹配列表中的任意字元
  • [^…] :匹配不在列表中的任意字元
  • . :匹配除了回車和換行符之外的任何字元
  • w :元符號,相當於[a-zA-Z0-9_],匹配任何字母、數位、下劃線字元,這樣的字元也稱為單詞字元
  • W :元符號,相當於[^a-zA-Z0-9_],匹配除了字母、數位、下劃線字元之外的任何字元
  • d :元符號,相當於[0-9],匹配任何單個的數位字元
  • D :元符號,相當於[^0-9],匹配除了數位之外的任何單個字元
  • s :元符號,匹配空白字元,空白字元是指空格、Tab字元和回車換行符
  • S :元字元,匹配任何非空白字元

2、重複元字元(量詞)

  • x? :匹配0個或1個x。
  • x+ :匹配1個或多個x。
  • x* :匹配0個或多個x。
  • x{n} :匹配n個x。
  • x{n,} :匹配n個或多個x。
  • x{n,m} :匹配n到m個x。

3、定位元字元

  • ^ :匹配必須出現在字串的開頭或行的開頭(開頭)
  • $ :匹配必須出現在以下位置:字串結尾、字串結尾處的 n 之前或行的結尾。(結尾)
  • b :匹配單詞的開始或結束
  • B :匹配非單詞的開始或結束
  • x(?=y) :正向肯定預查。只有在x後面跟上y時,才匹配x成功。(正向等=)
  • x(?!y) :正向否定預查。只有在x後面不跟著y時,才匹配x成功。 (正向不等!)
  • (?<=x)y:反向肯定預查。只有在y前面跟x時,才匹配y 成功。Javascript不支援。(反向等,為在正向等前加<)
  • (?<!x)y: 反向否定預查。只有在y前面不跟x時,才匹配y 成功。Javascript不支援。(反向不等,為在正向等前加<)

4、分組和替換字元

  • x|y :匹配x或y
  • (sub) :反向參照,將子表示式sub作為一個整體處理,括號的作用相當於代數中括號的作用。並將捕獲的子匹配儲存在1,2,......和$1,$2,......中。例如:/a(bc)+/中,加號元字元作用在子表示式bc上,它匹配abc、abcbc,但是不匹配a和ac
  • (?:sub) :分組子模式,但是不捕獲子模式。它的作用與(sub)類似,稱為無記憶匹配
  • 1,2,3,... :在正規表示式中,分別包含與正規表示式中第一個反向參照、第二個反向參照、第三個反向參照...相匹配的子串
  • $1,$2,$3,... :在替換中,分別包含與正規表示式中第一個反向參照、第二個反向參照。第三個反向參照...相匹配的子串

5、特殊字元

特殊字元是指那些不容易進行直接書面表達或不容易直接使用鍵盤輸入的字元。

  •  :匹配null字元,對應的十六進位制值為x00
  • b :匹配退格字元,對應的十六進位制值為x08
  • n :匹配換行字元,對應的十六進位制值為x0A
  • r :匹配回車字元,對應的十六進位制值為x0D
  • f :匹配換頁字元,對應的十六進位制值為x0C
  • t :匹配製表(TAB)字元,同時對應於水平製表符x09和垂直製表符x0B
  • xhh :匹配用2個十六進位制數位表示的字元
  • uhhhh :匹配用4個十六進位制在數位表示的字元,這些字元是Unicode字元。[u4e00-u9fa5] 匹配任意一個漢字
  • cchar :匹配命名的控制字元

6、需要跳脫的字元

. * + ( ) $ / ? [ ] ^ { } - ! < >

7、貪婪與非貪婪匹配

  • 貪婪匹配:正規表示式一般趨向於最大長度匹配,也就是所謂的貪婪匹配。 
    如使用模式 "ab.*c" 匹配字串"abcaxc";,結果就是匹配到:abcaxc。
  • 非貪婪匹配:就是匹配到結果就好,就少的匹配字元。 
    如使用模式 "ab.*?c" 匹配字串"abcaxc",結果就是匹配到:abc。

預設是貪婪模式;在量詞後面直接加上一個問號?就是非貪婪模式。如:*?

8、常見正規表示式

[1-9]?[0-9]|100 :匹配0-100的數位

n[s| ]*r :匹配空行的正規表示式

二、正規表示式應用舉例

1、驗證表示式

只能輸入數位:"^[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]+$"。或…^[W]$ 
只能輸入由數位、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}$" 正確格式為:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。 
驗證身份證號(15位或18位元數位):"^d{15}|d{18}$"。 
驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"1"~"12"。 
驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"和"1"~"31"。 
驗證全形字元: “^uFF00-uFFFF” 
匹配雙位元組字元(包括漢字在內):[^x00-xff] 
匹配空行的正規表示式:n[s| ]*r 
匹配HTML標記的正規表示式:/<(.*)>.*</1>|<(.*) />/ 
匹配首尾空格的正規表示式:(^s*)|(s*$) 
匹配IP地址的正規表示式: (d+).(d+).(d+).(d+)

vs中批次操作

(按ctrl+H 選上正規表示式)

  • 刪除註釋 ://.* 替換為空。
  • 刪除空行:^s*n 替換成空。

三、資料夾中的檔案內容正則批次替換

1、使用VSCode檔案替換(使用JS引擎)

在VSCode中,使用正規表示式,將網頁中的font元素批次更換成font元素

<font (.*?")>((n|.)*?)</font>

替換成:

<span $1>$2</span>

2、資料夾中的檔案內容正則批次替換

下載小工具:ReplaceAll

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


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