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