貪婪與懶惰
常見的正規表示式
簡單來說,正規表示式就是用一些特定的符號來代替字串
**說明
.匹配除\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指令碼功能,需要乙個指令碼編輯器,關鍵字變色等等相關功...