正規表示式入門

2021-08-18 16:34:42 字數 1902 閱讀 3101

1.常用符號

常見元字元

.   匹配除換行外的所有字元

\b  匹配單詞開始或結束

\d  匹配數字

\w  匹配字母、數字、下劃線

\s  匹配任意空白字元,包括空格、製表符(tab)、換行符、中文全形空格等

^   匹配字串開始

$   匹配字串結束

常見限定符

*   重複零次或多次

+   重複一次或更多次

?  重複一次或零次

重複n次

重複n次或更多次

重複n到m次

常見反義

\w  匹配任意不是字母、數字、下劃線、漢字的字元

\s  匹配任意不是空白符的字元

\d  匹配任意非數字的字元

\b  匹配不是開頭或結束的位置

[^a]匹配除a以外的任意字元

[^abcde]匹配除了abcde以外的任意字元

[^(123|abc)]匹配除了1、2、3或者a、b、c的任意字元

例子:匹配qq號:^\d$

匹配一句話中s開頭單詞:\bs\w*\b

2.字元集合

正規表示式通過來自定義字元合集

例如 [abcde] 匹配a、b、c、d、e中任意乙個字元

[a-za-z0-9_] 等同於\w

3.分支條件

分支條件指的是在正規表示式裡有多個匹配條件,只要滿足其中一種就被當成匹配,具體是用「|」表示

例 : 匹配帶區號的**號,北京區號010+八個數字,承德是0314+七位數字

0\d-\d|0\d-\d

4.分組

正規表示式用「()」表示分組

ip位址範圍(0-255).(0-255).(0-255).(0-255)

分為以下匹配條件

25[0-5]

2[0-4][0-9]

1[0-9]

[1-9][0-9]

[0-9]

((25[0-5]|2[0-4][0-9]|1[0-9]|[1-9][0-9]|[0-9])\.)(25[0-5]|2[0-4][0-9]|1[0-9]|[1-9][0-9]|[0-9])

5.後向引用

就是引用之前的組,每個組都有乙個id,可以通過id引用前面的組,要注意的是引用的是內容而不是模式

也可以自己指定表示式的組名方式如下:

(?\d+) 或者(?\d+)這個組的名稱就是name

(?:\d+)不捕獲文字,也不命名,作用是減少資源占用。

6.零寬斷言

零寬斷言 我們知道元字元是匹配乙個位置,而且這個位置需要滿足一定條件,我們把這個條件稱為斷言

或零寬度斷言

正規表示式只有在斷言為真的時候才會進行匹配

零寬斷言有兩種:正向零寬斷言,負向零寬斷言

正向零寬斷言有兩種形式:

(1)(?=exp)叫做零寬度正向**先行斷言,就是**後面一定匹配到表示式,而且只有匹配到表示式才會匹配前面的表示式

例如 [a-z]*(?=ing) 匹配 i love cooking 智慧型匹配到 cooking 這個詞

(2)(?<=exp)叫做零寬度正回顧後發斷言,從左面開始匹配表示式,匹配成功之後再去匹配之後的字串

例如 (?<=abc) 匹配abcdefgabc 得到結果是 defgabc,而不是abcdefg

負向零寬斷言也有兩種形式:

(1)(?!exp)叫做零寬度負**先行斷言,斷言此位置後面不能匹配exp。

例如 \b((?!abc)\w)+\b 匹配abc123,ade123 得到結果ade123

(2)(?).*(?=<\/\1>)

匹配hello world

思路是通過零寬度正向回顧後發斷言得到「hello world

」再通過匹配

並且引用id=1的組,通過零寬度正向**先行斷言,去掉

正規表示式 正則入門

先從乙個例子開始正規表示式。書寫乙個匹配手機號的正規表示式,為了方便討論,假定手機號是1開頭,第二位只能是3 5 8中的其中乙個,總共11位的數字,形如13 匹配手機號的正規表示式為 1 358 d 下面介紹此正規表示式中的各個符號的含義。表示字串的開頭,後面緊接著1,表示匹配的字串要以 1 開頭。...

正規表示式入門

對於文字字元,有11個字元被保留作特殊用途。他們是 這些特殊字元也被稱作元字元 不可顯示字元 可以使用特殊字串行來代表某些不可顯示字元 代表tab 0x09 代表回車符 0x0d 代表換行符 0x0a 字符集 字符集是由一對方括號 括起來的字元集合。使用字符集,你可以告訴正規表示式引擎僅僅匹配多個字...

正規表示式入門

老師說過 正規表示式就是用字串讀取字串!學習正規表示式的最好方法是從例子開始,理解例子之後再自己對例子進行修改,實驗。下面給出了不少簡單的例子,並對它們作了詳細的說明。假設你在一篇英文 裡查詢hi,你可以使用正規表示式hi。這幾乎是最簡單的正規表示式了,它可以精確匹配這樣的字串 由兩個字元組成,前乙...