简单明了的正则表达式汇总
簡單明了的正則表達式匯總!!!
資源來源:編程膠囊官網
基礎正則總結
| [Pp]ython | 匹配“Python”或“python”。 |
| rub[ye] | 匹配“ruby”或"rube"。 |
| [abcdef] | 匹配中括號內的任意一個字母。 |
| [0-9] | 匹配任何數字。類似于[1234567890]。 |
| [a-z] | 匹配任何小寫字母。 |
| [A-Z] | 匹配任何大寫字母。 |
| [a-zA-Z0-9] | 匹配任何字母及數字。 |
| [^au] | 除了au字母以外的所有字符。 |
| [^0-9] | 匹配除了數字外的字符。 |
| . | 匹配除“\n”之外的任何單個字符。要匹配包括‘\n’在內的任何字符,請使用像‘[.\n]’的模式 |
| ? | 匹配一個字符零次或一次,另一個作用是非貪婪模式 |
| + | 匹配一次或多次 |
| * | 匹配零次或多次 |
| \b | 匹配一個長度為0的子串 |
| \d | 匹配一個數字字符。等價于[0-9]。 |
| \D | 匹配一個非數字字符。等價于 [^0-9]。 |
| \s | 匹配任何空白字符,包括空格、制表符、換頁符等等。等價于 [ \f\n\r\t\v]。 |
| \S | 匹配任何非空白字符。等價于[^ \f\n\r\t\v]。 |
| \w | 匹配包括下劃線的任何單詞字符。等價于[A-Za-z0-9_]。 |
| \W | 匹配任何非字母、數字、下劃線。等價于[^A-Za-z0-9_]。 |
進階部分
分組
在正則表達式中還提供了一種將表達式分組的機制,當使用分組時,除了獲得整個匹配。還能夠在匹配中選擇每一個分組。
要實現分組很簡單,使用()即可。
這段正則表達式將文本分成了兩組,第一組為:0731,第二組為8825951。
分組有一個非常重要的功能——捕獲數據。所以()被稱為捕獲分組,用來捕獲數據,當我們想要從匹配好的數據中提取關鍵數據的時候可以使用分組。
(\d{4}) 和 (\d{7})就分別捕獲了兩段數據:
或者條件
使用分組的同時還可以使用 或者(or)條件。
例如要提取所有圖片文件的后綴名,可以在各個后綴名之間加上一個 |符號:
非捕獲分組
有時候,我們并不需要捕獲某個分組的內容,但是又想使用分組的特性。
這個時候就可以使用非捕獲組(?:表達式),從而不捕獲數據,還能使用分組的功能。
例如想要匹配兩個字母組成的單詞或者四個字母組成的單詞就可以使用非捕獲分組:
分組使用技巧
日期可以有很多格式,例如:
20200102 2020-01-02 2020-1-2 2020.01.02 2020 01 02 2020 1 2 2020/01/02現在我們想要使用正則表達式將其中的年月日全都提取出來。
可以發現他們唯一的區別就在于分隔符和月份與日期,這個時候可以使用[]來匹配多種情況。
例如:
通過(\d{4})[-./\s]?(\d{1,2})[-./\s]?(\d{1,2}) 就可以從文本中將年月日分別提取出來了。
雖然這段正則表達式看起來內容挺多,但是還是很容易理解的,[-./\s]表示匹配三個可能出現的分隔符-./和空白,?表示匹配它們0次或者1次,其他年月日的數據使用\d{N}與分組結合就可以提取到目標數據。
分組的回溯引用
正則表達式還提供了一種引用之前匹配分組的機制,有些時候,我們或許會尋找到一個子匹配,該匹配接下來會再次出現。
例如,要匹配一段 HTML 代碼,比如:0123<font>提示</font>abcd,可能會編寫出這樣一段正則表達式:
這確實可以匹配,不過可能還有另一種情況,如果數據改成這樣:<font>提示</bar>
在這里font 和 bar 明顯不是一對正確的標簽,但是我們編寫的正則表達式還是將它們給匹配了,所以這個結果是錯誤的。
我們想讓后面分組的正則也匹配font,但是現在所有形式的都會匹配。
那如果想讓后面分組的正則和第一個分組的正則匹配同樣的數據該如何做呢?
可以使用分組的回溯引用,使用\N可以引用編號為N的分組,因此上述例子的代碼我們可以改為:
通過這個例子,可以發現 \1 表示的就是第一個分組,在這里第一個分組匹配的是 font 所以\1 就代表font。
正向先行斷言
很多人也稱先行斷言和后行斷言為環視,也有人叫預搜索,其實叫什么無所謂,重要的是知道如何使用它們!
先行斷言和后行斷言總共有四種:
正向先行斷言:(?=表達式),指在某個位置向右看,表示所在位置右側必須能匹配表達式
例如:
我喜歡你 我喜歡 我喜歡我 喜歡 喜歡你如果要取出喜歡兩個字,要求這個喜歡后面有你,這個時候就要這么寫:喜歡(?=你),這就是正向先行斷言。
提取包含大小寫字母的字符串
先行斷言可以用來判斷字符串是否符合特定的規則,例如提取包含至少一個大小寫字母的字符串:
(?=.*?[a-z])(?=.*?[A-Z]).+ 這段正則表達式規定了匹配的字符串中必須包含至少一個大寫和小寫的字母。
反向先行斷言
反向先行斷言(?!表達式)的作用是保證右邊不能出現某字符。
例如: 我喜歡你 我喜歡 我喜歡我 喜歡 喜歡你
如果要取出喜歡兩個字,要求這個喜歡后面沒有你,這個時候就要這么寫:喜歡(?!你),這就是反向先行斷言。
正向后行斷言
本小節只需要你記住一句話:先行斷言和后行斷言只有一個區別,即先行斷言從左往右看,后行斷言從右往左看。
正向后行斷言:(?<=表達式),指在某個位置向左看,表示所在位置左側必須能匹配表達式
例如:如果要取出喜歡兩個字,要求喜歡的前面有我,后面有你,這個時候就要這么寫:(?<=我)喜歡(?=你)。
反向后行斷言
反向后行斷言:(?<!表達式),指在某個位置向左看,表示所在位置左側不能匹配表達式
例如:如果要取出喜歡兩個字,要求喜歡的前面沒有我,后面沒有你,這個時候就要這么寫:(?<!我)喜歡(?!你)。
想要學習更多的正則表達式和在線訓練請訪問:
編程膠囊、https://regexr-cn.com/
如果您覺得本文還不錯,還望點個贊支持一下!
總結
以上是生活随笔為你收集整理的简单明了的正则表达式汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【图形处理】字模软件与汉字取模(GB23
- 下一篇: 6.电报机与继电器qk