正則表達式教程

正則表達式

匹配非打印字符(assii碼前27個 除了0
  • \cx: 例: \ci 匹配ctrl+i(windows系統下面 ) 匹配相似\t的字符 就是匹配ascii碼的第十個字符,和字母表順序錯開一個,由於零不匹配,這個x能夠是a-z,A-Z,別的字符跟在\c後面將當作匹配‘c’字符 例如:\c1
  • \f: 匹配一個換頁符號 [\cL]也能夠匹配,做用:讓打印機打印下一張紙
  • \n: 匹配一個換行符。[\cJ]
  • \r: 匹配一個回車符。[\cM]
  • \s: 匹配任意空白字符,不能顯示上屏幕上的,上面的他均可以匹配到
  • \S: 匹配任何非空白的字符,和上面的相反,能顯示在屏幕上的
  • \t: 匹配一個製表符號。 鍵盤上的tab鍵
  • \v: 匹配一個垂直製表符。它的做用是讓‘\v’後面的字符從下一行開始輸出,且開始的列數爲「\v」前一個字符所在列後面一列。
  • \w: 相似[0-9a-zA-Z_]。表示數字、大小寫字母和下劃線。
  • \W: [^0-9a-zA-Z_]。非單詞字符。和上面匹配的內容相反。
  • \d: [0-9]。表示是一位數字。
  • \D: [^0-9]。表示除數字外的任意字符。

上面的\n \r \s \S \t \w \W \d \D都是經常使用的,剩下的都是基本上不會用到的正則表達式

特殊匹配字符

若是要匹配如下的特殊字符,必須先讓字符轉義即'\x',windows

  • $: 匹配之前面結尾的字符。 例如:ddsdsfsfa a$ 只會匹配a這個字符,若是ddddsdsffb 匹配這個字符串,則沒有匹配3d

  • (): 標記一個表達式的開始和結束的位置code

  • *: 匹配前面的表達式零次或者屢次blog

  • +: 匹配前面的表達式一次或者屢次教程

  • .: 匹配除換行符\n以外的任何單字符ci

  • []: 匹配中括號表達式裏面的東西,通常和^一塊兒用字符串

  • ?: 匹配前面的表達式零次或者一次get

  • : 將下一個字符轉義class

  • ^: 匹配字符串開始的位置

  • {: 區配限定字符

    () 是爲了提取匹配的字符串。表達式中有幾個()就有幾個相應的匹配字符串。一個()表明一個組 ([a-z][0-9])這個正則你必須得先匹配到前面是a-z裏面的東西,後面跟的還得是0-9裏面的東西,纔會匹配到值 例如:aadccc23這個字符串就能夠匹配到c2,aadccc@23這個字符串,([a-z][0-9])經過這個正則就匹配不到值 。 []是定義匹配的字符範圍。好比 [a-zA-Z0-9] 表示相應位置的字符要匹配英文字符和數字。[\t]表示tab。 {}通常用來表示匹配的長度,好比 \t{3} 表示匹配三個tab,\t[1,3]表示匹配一到三個tab。

  • |: 指明兩項之間的一個選擇。(小括號‘()’會改變他的做用範圍) 例:wl:625363199@qq.com

    wl|yjm|khl:.*  和 (wl|yjm|khl):.*

    後者會匹配完整的wl:625363199@qq.com 前者則只會匹配wl ,由於後者的小括號改變了|做用範圍,(wl|yjm|khl)使用範圍變成了(wlyjmkhl),和:.*後面的字符不在一個段,因此能夠匹配整個字符,前者的範圍在wl|yjm|khl:.* 上面,能夠這樣理解wl爲一組yjm 爲一組 khl:.*爲一組,因此匹配到wl就匹配完了若是將正則改成yjm|khl|wl:.* 就能夠 匹配完整的字符串

貪婪匹配模式和非貪婪匹配模式(懶惰匹配)

貪婪模式的匹配正則:

  1. 「{m,n}」有n個最多匹配n個 例如:d{1,3} ddd 匹配到的值就是ddd
  2. "{m,}"有多少個就匹配多少個 例如:d{1,} ddddd匹配到的值就是ddddd
  3. "?"有一個就匹配一個 例如:d? ddd匹配到的值就是d d d
  4. "*"有多少個就匹配多少個 例如:"d星號(typora的bug)" ddd匹配到的值就是d d d
  5. "+"有多少個就匹配多少個 例如:d+ ddd匹配到的值就是d d d

非貪婪模式正則:

  1. "{m,n}?"按m匹配 例如:d{1,3}? ddd 匹配到的值就是d d d 一個一個值返回
  2. "{m,}?"按m個數匹配 例如:d{1,}? ddd 匹配到的值就是d d d一個一個值返回
  3. "??"匹配零個 例如:d?? ddd 匹配到的值就是沒有 匹配
  4. "*?"匹配零個 例如:d星號? ddd 匹配到的值就是沒有匹配
  5. "+?"匹配一個 例如:d+? ddd 匹配到的值就是 d d d一個一個值返回
限定符
  • *:匹配零次或者屢次
  • +:匹配一次或屢次
  • ?:匹配零次或一次
  • {n}:n不能爲負數,至少匹配n次
  • {n,}:至少匹配n+次,
  • {n,m}:至少匹配n次最多匹配m次。n<=m
定位符
  • ^: 匹配字符串開始的位置,和中括號結合使用體驗最佳
  • $: 匹配之前面結尾的字符。 例如:ddsdsfsfa a$ 只會匹配a這個字符,若是ddddsdsffb 匹配這個字符串,則沒有匹配
  • \b: 匹配一個單詞邊界,即字與空格間的位置,例如:?abc \ba 能匹配到a,\bb就不能配置到b了,由於b前面沒有沒有邊界字符,?a中bc 這樣\bb 就能匹配到b了由於b和前面的‘中‘這個字符產生了邊界,因此就能夠匹配了,通常符號和中文之間,符號和英文之間,中文和英文之間會產生邊界。
  • \B: 匹配一個非單詞邊界,和上面匹配的相反,通常符號和符號之間,英文和英文之間,中文和中文之間沒有邊界。

^:不放在中括號裏面匹配的是一行開頭的部分,例如:daf ^d 這個是能夠匹配到d的 ^da 也是能夠匹配到da的,它們都跟在開頭的後面是連續的,^a 是在daf這個字符串中是匹配不到a的,adf 這個字符串就能夠被^a匹配到 ,a字符是adf字符串中開頭的第一個字符因此能夠被匹配到,^d 匹配adf這個字符串,匹配不到d,由於d不是開頭的第一個字符。^ad 匹配adf這個字符串能夠匹配到ad,由於ad是開頭前兩個字符,是連續的因此能夠匹配。

^:放在中括號裏面[^daf] 匹配以d開頭的字符或者以a或者以f開頭的字符,簡單的說就是不匹配daf 能夠理解爲取反的意思。例如:dafbbdcfgh 這個[^daf] 就會匹配 b b c g h 這幾個字符 。[^wl]匹配」wl是w測l試呀wl字符串「這個字符串的結果是,是、測、試、呀、字、符、串。除了wl這兩個字符別的字符都匹配。

捕獲

  • ?=: 前瞻,匹配表達式前面的表達式的內容。例如:a(?=b) 匹配ab這個字符串就會匹配到a這個字符,匹配ba這個字符串就匹配不到值 。
  • ?<=:後顧,匹配表達式後面的表達式的內容。例如:(?&lt;=b)a 匹配ba這個字符串就會匹配到a這個字符,匹配ab這個字符串就匹配不到值 。
  • exp1(?!exp2):負前瞻,匹配後面不是exp2的exp1 例如:a(?!b)匹配ba這個字符串會匹配到值,可是匹配bab,就匹配不到值 。由於a的後面出現b這個字符了。
  • (?<!--exp2)exp1 :負後顧,查找前面不是exp2的exp1,例如:(?<!b)a匹配ab這個字符串就會匹配到值 ,可是匹配bab這個字符就沒法匹配到值 ,由於a字符的前面出現了b字符,因此沒法匹配。
  • ?: 非捕獲分組,(?:a)匹配ab這個字符串的時候雖然會匹配到,可是不會把值存起來,增長正則的匹配速度。而(a)匹配ab這個字符串的時候匹配到的同時,也會將值存起來,後面能夠提取出來。

以上就是正則的基礎教程了,正則就是多用就熟悉了。

轉載代表出處就能夠,老師好我叫王同窗。

相關文章
相關標籤/搜索