正則表達式從入門到分析
簡單模糊查詢 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 ,用這種會佔用一個匹配