大佬們才玩的正規表示式,看完你也會

2021-10-07 22:41:28 字數 1978 閱讀 4477

貪婪與懶惰

常見的正規表示式

簡單來說,正規表示式就是用一些特定的符號來代替字串

**說明

.匹配除\n以外的任意字元

\w匹配數字或字母或 _

\w匹配非數字或字母或 _

\s匹配任意的空白符(空格,換行,字表符)

\s匹配非空白符

\d匹配所有數字

\d匹配非數字

\b匹配單詞的開始或結束(邊界)

\b匹配非單詞邊界

^匹配字串的開始

$匹配字串的結束

**說明

\f匹配乙個換頁符

\n匹配乙個換行符

\r匹配乙個回車符

\t匹配乙個水平製表符

\v匹配乙個垂直製表符

*匹配*

.匹配.

\匹配\

**說明

x | y

匹配x或y

[xyz]

字元集合。匹配所包含的任意乙個字元。例如』[abc]』 可以匹配 「plain」 中的 『a』。

[^xyz]

負值字元集合。匹配未包含的任意字元。例如』[^abc]』 可以匹配 「plain」 中的』p』、『l』、『i』、『n』。

[a-z]

字元範圍。匹配指定範圍內的任意字元

[^a-z]

負值字元範圍。匹配任何不在指定範圍內的任意字元。

回到頂部目錄

分類**

說明捕獲

(exp)

匹配exp,並捕獲文字到自動命名的組裡面

(?exp)

匹配exp,並捕獲文字到名稱為name的組裡

(?:exp)

匹配exp,不捕獲匹配的文字,也不給此分組分配編號

零度斷言

(?=exp)

匹配exp前面的位置

(?<=exp)

匹配exp後面的位置

(?!exp)

匹配後面跟著不是exp的位置

(?匹配強面不是exp的位置

注釋(?#comment)

這種型別的分組不對正規表示式的處理產生任何影響,只是提供注釋讓人閱讀

每使用一對()小括號,就是分了乙個小組,並且每個小組都有乙個編號

系統自動分配編號的原則是:

從左到右分配編號,第乙個組是1,第二個是2,以此類推(正規表示式整體是乙個組,編號為0)

實現上會從右到左查詢兩次,第一次給未命名的組分配組號,第二次給已命名的組分配組號

可以使用(?:***)的語法來讓乙個組不參與自動分配組號

後向引用是指通過反斜槓\加上 數字(編號)的方式來重複使用某一組的正規表示式

例如:(\d+)\s\1這個式子中可看出\d+是第1組,編號就是1,後面的\1就是引用了前面這一組的內容,相當於(\d+)\s(\d+)

匹配寬度為0,在匹配元素的位置設定斷點

比如乙個字串ddexpaa

dd(?=exp):匹配exp前面的dd

(?=exp)aa:匹配exp後面的aa

比如乙個字串aabab

貪婪的正則匹配:a.*b ==> 匹配到aabab乙個結果

懶惰的正則匹配:a.*?b ==> 匹配到aab和ab兩個結果

**說明

*重複0次或者無數次

+重複1次或者無數次

?重複0次或者1次

重複n次

重複n次或者重複n次以上

重複n到m次

**說明

*?重複任意次,但盡可能少重複

+?重複1次或者更多次,但盡可能少重複

??重複0次或者1次,但盡可能少重複

?重複n到m次,但盡可能少重複

?重複n次以上,但盡可能少重複

回到頂部目錄

回到頂部目錄

也談正規表示式

其實很早就知道了正規表示式,在整合vbscript指令碼的時候,就看到了該功能,不過那時覺得很難,覺得也派不上什麼用場,所以也沒有過多關注。最近看了孟巖老師的關於正規表示式講解,有一種學習正規表示式的衝動,適時我們開發的專案中需要嵌入python指令碼功能,需要乙個指令碼編輯器,關鍵字變色等等相關功...

也談正規表示式

其實很早就知道了正規表示式,在整合vbscript指令碼的時候,就看到了該功能,不過那時覺得很難,覺得也派不上什麼用場,所以也沒有過多關注。最近看了孟巖老師的關於正規表示式講解,有一種學習正規表示式的衝動,適時我們開發的專案中需要嵌入python指令碼功能,需要乙個指令碼編輯器,關鍵字變色等等相關功...

也談正規表示式

其實很早就知道了正規表示式,在整合vbscript指令碼的時候,就看到了該功能,不過那時覺得很難,覺得也派不上什麼用場,所以也沒有過多關注。最近看了孟巖老師的關於正規表示式講解,有一種學習正規表示式的衝動,適時我們開發的專案中需要嵌入python指令碼功能,需要乙個指令碼編輯器,關鍵字變色等等相關功...