正則表達(dá)式實(shí)例學(xué)習(xí)
本文關(guān)鍵詞:學(xué)習(xí)正則表達(dá)式,由筆耕文化傳播整理發(fā)布。
學(xué)習(xí)正則表達(dá)式的最好方法是從例子開始,理解例子之后再自己對(duì)例子進(jìn)行修改,實(shí)驗(yàn)。我覺得正則表達(dá)式很像大一時(shí)候?qū)W習(xí)的離散數(shù)學(xué)的,使用“與或非(&,|,^)”的邏輯表達(dá)式來抽象一段復(fù)雜的自然語言描述,從而解決一些邏輯分析問題。
1.語法:當(dāng)我們進(jìn)入大學(xué)的時(shí)候,每個(gè)同學(xué)都會(huì)有一個(gè)學(xué)號(hào)(例如我的學(xué)號(hào)是201235010126)。在我們的大學(xué),學(xué)號(hào)里面集中了年級(jí),專業(yè)代碼,班級(jí)代碼,學(xué)生編號(hào)的種種信息,由此得到每一個(gè)同學(xué)唯一的ID號(hào)。今天這里采用專業(yè)年級(jí)的例子,由淺入深,講解一個(gè)復(fù)雜表達(dá)式的來源。下面結(jié)合自己情況,以所在大學(xué)湖南大學(xué)保密專業(yè)為例,寫一寫學(xué)習(xí)正則表達(dá)式心得。
學(xué)號(hào)編碼規(guī)則:
對(duì)201235010126來說: 條件1:1-4位(2012)表示年號(hào) 條件2:5-8位(3501)固定是專業(yè)號(hào)3501 條件3:倒數(shù)第三位表示班級(jí)號(hào),每個(gè)年紀(jì)有6個(gè)班級(jí) 條件4:最后兩位表示班級(jí)內(nèi)學(xué)號(hào),每個(gè)班有32人 條件5:12級(jí)開始倒數(shù)第四位補(bǔ)0
2.1實(shí)例一:匹配12級(jí)保密1班的學(xué)生。 正則表達(dá)式是: 分析1."^"匹配開頭,"$"匹配結(jié)尾,,"|"表示或
2.?:匹配pattern但不獲取匹配結(jié)果,也就是說這是一個(gè)非獲取匹配,不進(jìn)行存儲(chǔ)供以后使用。這在使用或字符“(|)”來組合一個(gè)模式的各個(gè)部分是很有用.
3.學(xué)生學(xué)號(hào)是01-32,所以拆分成3組:
a)01-09:0[1-9]
b)10-29:[1-2]/d
c)30-32:3[0-2]
?:是小括號(hào)的專利,因?yàn)樾±ㄌ?hào)里面的是一組字符
2.3實(shí)例三:匹配11級(jí)保密6個(gè)班和12級(jí)保密6個(gè)班的所有學(xué)生()表示把一些代碼組合起來,[]表示把所有的字符組合起來
2.4實(shí)例四:匹配2001-2019級(jí)的所有學(xué)生(假設(shè)每個(gè)年級(jí)6個(gè)班,其中2011為分界線,2012級(jí)開始倒數(shù)第四位補(bǔ)0) 分析1.條件1-2規(guī)定了最后三位,也就是101-632,所以我們可以輕松想到1-6$這樣可以匹配后三位,在這里面01 - 32可以分成3段:
a)[1-9] b)10-29:[1-2]/d c)[0-2]
2.然后我們看前面四位,由于特殊的年份是以11-12年分界的,所以我們說從第3位到倒數(shù)第4位都是特殊的,開頭肯定是^20,然后里面根據(jù)情況可以分為補(bǔ)0的還是不補(bǔ)為的,所以可以得到(xxx3501|xxx35010),然后我們可以看到第一個(gè)XXX表示的是01-11,也即可以寫成(?:0[1-9]|1[01]),第二個(gè)表示的是12-19,也即可以直接寫成1[2-9],所以中間一部分是
([2-9]35010)
3.最后:我們就可以得出一個(gè)看起來非常高大上的正則表達(dá)式了
終于把這個(gè)看似高大上的一串正則表達(dá)式匹配出來了,其實(shí)只要仔細(xì)羅列好條件,正則表達(dá)式就是xx的oo次的無限組合。O(∩_∩)O~ ~
本文關(guān)鍵詞:學(xué)習(xí)正則表達(dá)式,由筆耕文化傳播整理發(fā)布。
本文編號(hào):365455
本文鏈接:http://sikaile.net/wenshubaike/mishujinen/365455.html