【D1n910】正則表達式入門(四)

正常操作,正常分析,大家好,我是D1n910
當你看完之前三期的內(nèi)容



你會發(fā)現(xiàn),這個該死的D1n910怎么那么慢,怎么教了這么久還沒教完!
因為我實在是太菜了,俺也是在邊學(xué)邊寫教程——通過要寫教程,所以強迫寄己去學(xué)習。
還有一小部分就“學(xué)完”,加油加油加油(對你和我自己說)

十、反義
hello,hello,大家好,我是出久的死忠粉,我喜歡帶有“出”和“久”的彈幕,只要沒有“出”和“久”的彈幕,我都不要,通過反義就能夠?qū)崿F(xiàn)我們的需求。

通過通過上面的表,我們可以知道,使用"/^[^出久]*$/"就可以實現(xiàn)我們剛剛的需求了。

"/^[^出久]+$/"的意思是,從字符串開頭(^)匹配【非“出”、“久”】([^出久])的字符,匹配零次或者無數(shù)次(*),一直匹配到字符串結(jié)尾($)。
* 如果不添加 "^" 或者 "$" 這兩個元字符,會導(dǎo)致字符串中雖然有出久,不過如果有其他的非“出”“久”的字符串,還是會匹配成功。
十一、向后引用
通過之前的學(xué)習,我們學(xué)會了使用分組來重復(fù)匹配一組字符串,需要提到的一點是,分組內(nèi)部本身也支持各種元字符,比如 “|” 這個元字符。

當我們希望對同一個字符串內(nèi)容,在不同地方進行重復(fù)匹配。
舉個例子,我們想要匹配同樣的字符串出現(xiàn)多次的情況——我是《我的英雄學(xué)院》,綠谷出久和爆豪勝己的忠實兄弟粉絲。
我能夠接受有粉絲把他們的名字單個組合在一起,出現(xiàn)一次,比如“勝久”,不過我不能夠接受他們重復(fù)比較多的次數(shù),比如“爆久爆久”,這是我不能接受的。
不過類似“爆久勝出”的,我能接受。
那我應(yīng)該怎么屏蔽這樣的彈幕呢?
單純地使用"/(爆久){2,}/"只針對了爆久這種情況,對于“勝久”這種情況無可奈何。
思路很簡單。
用“/([綠谷出久爆豪勝己][綠谷出久爆豪勝己])/"可以匹配“綠出”"綠谷"“綠豪”......“勝豪”,然后就用到了我們【向后應(yīng)用】的概念,通過使用 "\1"來再次把剛剛匹配到的字符串內(nèi)容拿來匹配!

向后引用的意思就是在后面可以引用前面匹配到的內(nèi)容,主要用到了分組“()”的特性。對于分組“()”來說,它默認從左到右開始,以第一個左括號為默認分組序號1,第二個括號默認分組序號2...
1、觀察下面這個例子,通過使用括號,我們分成了兩個組,\1: (0|1),\2:(4321|456),因為\2對應(yīng)的組已經(jīng)匹配到了4321了,則它本身對應(yīng)的字符串就是4321,而不能是456。

分組內(nèi)也可以嵌套分組,只要按照“左括號”對應(yīng)分組,“左括號”順序?qū)?yīng)【默認分組】序號即可,觀察下面的例子。

2、我們希望分組擁有自定義的名稱,而不是默認的序號表示,我們可以在左括號右邊寫"?<自定義分組名稱>",引用的時候,使用"\k<自定義分組名稱>"。下面是一個小例子:

當然,這也不妨礙默認分組的序號

3、如果我們不想括號有分組名稱,包括默認分組名稱,我們可以在對應(yīng)左括號右邊寫"?:"
比如下面的例子,將默認分組名稱序號1內(nèi)部分組用"?:"去掉默認分組,那么下一個本來是第三個左括號的分組的默認序號久變成了2了。

上面描述的情況,就是捕獲元字符的使用方式


正則表達式學(xué)習進度(11/18)