正則表達式從入門到分析

簡單模糊查詢 hi

可以匹配hi,HI,Hi,hI這四種情況中的任意一種。包含hi這兩個連續的字元,比如him,history,high等等

精確地查找hi這個單詞

\bhi\b

單詞hi,然後是任意個任意字元(但不能是換行),最後是Lucy這個單詞

\bhi\b.*\bLucy\b

解釋: . 表示除了換行符以外的任意字元

​ * 表示內容可以是任意數量的(擴展+重複一次或更多次 ?重複零次或一次)

​ .*連在一起就意味著任意數量的不包含換行的字元

匹配以0開頭,然後是兩個數字,然後是一個連字號”-“,最後是8個數字

方式一 0\d\d-\d\d\d\d\d\d\d\d

解釋:\d匹配一個數字

方式二 0\d{2}-\d{8}

解釋:{2}({8})的意思是前面\d必須連續重複匹配的次數

擴展:{5,12}則是重複的次數不能少於5次,不能多於12次

​ {n,}重複n次或更多次

小結:

\b . 等稱為元字元,常用的元字元如下表

常用的元字元

程式碼 說明
. 匹配除換行符以外的任意字元
\w 匹配字母或數字或下劃線或漢字 \W 用大寫表示相反含義 匹配不是字母或數字或下劃線或漢字
\s 匹配任意的空白符 \S 用大寫表示相反含義 匹配不是空白符
\d 匹配數字 \D用大寫表示相反含義 匹配任意非數字的字元
\b 匹配單詞的開始或結束 \B用大寫表示相反含義 匹配不是單詞開頭或結束的位置
^ 匹配字元串的開始 類似 \b的開始
$ 匹配字元串的結束 類似\b的結束

注意:如果要查找元字元本身的話,如查找字元串中是否包含$ ,需要加\轉義,否則會被解釋成匹配字元串的結束

如  \b\$.\b   匹配的為$開頭的字元串並以除換行符以外的任意字元結尾

其他需要轉義的

匹配雙引號"\"
匹配單引號''

{2} {5,12}等稱為限定符,指定可允許匹配的次數,常用的限定符如下表

​ 常用的限定符

程式碼/語法 說明
* 重複零次或更多次
+ 重複一次或更多次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更多次
{n,m} 重複n到m次

​ 重疊限定符的含義

程式碼/語法 說明
*? 重複任意次,但儘可能少重複
+? 重複1次或更多次,但儘可能少重複
?? 重複0次或1次,但儘可能少重複
{n,m}? 重複n到m次,但儘可能少重複
{n,}? 重複n次以上,但儘可能少重複

擴展:對一段整體加限定符,把整體括弧起來即可,括弧起來的內容叫分組

\b(\d\s){10}000\b  數字加空白字元,整體重複10次,最後拼000  

匹配自定義字元[aeiou]

可以匹配aeiou中任何一個字元

其他[.?!] 匹配標點符號(.或?或!)。

擴展:[0-9] 匹配0到9中的一個數字,含意與\d就是完全一致的

​ [a-z0-9A-Z_] 可以匹配a到z、0到9、A到Z

  • 用^匹配相反含義:
[^aeiou]   匹配除了aeiou這幾個字母以外的任意字元

或條件 |

\d{5}-\d{4}|\d{5}

解釋:從左到右,先判斷\d{5}-\d{4} 是否滿足,滿足就不判斷後面

在其他位置引用分組內容

\b(\w+)\b\s+\1\b

解釋:對於分組(\w+)被引用到\1重複使用了,所以可以匹配到結果如 go go 或者kitty kitty等。

​ 1代表從左到右的分組的順序

擴展:可以自定義分組的名稱

方式一:

?<Word>  定義分組名為Word
\k<Word>  引用分組Word

方式二:

?'Word' 定義分組名為Word
\k'Word'  引用分組Word

所以例子可以寫成

\b(?<Word>\w+)\b\s+\k<Word>\b

排除分組內容在匹配

\b\w+(?=ing\b)

解釋:開頭匹配為\w+ 排除結尾並且是ing的

​ 這種格式為(?=exp),對結尾內容生效

擴展一 :(?<=exp) ,對開頭部分生效,如

(?<=\bre)\w+\b 排除開頭並且是re的,後面滿足\w+

一起使用如:

(?<=\s)\d+(?=\s) 排除開頭並且是空白字元的 ,中間多個數字,排除結尾並且是空白字元的

擴展二:(?!exp) , 排除任意位置值,並且不佔用一個匹配

\b\wq(?!u)\w\b 排除q後為u的值,並且這個值也滿足\w

\b\w*q[^u]\w*\b   排除q後為u的值,但是這個值下一個值去匹配\w  ,用這種會佔用一個匹配