正則表達式實例學習


學習正則表達式的最好方法是從例子開始,理解例子之后再自己對例子進行修改,實驗。我覺得正則表達式很像大一時候學習的離散數學的,使用“與或非(&,|,^)”的邏輯表達式來抽象一段復雜的自然語言描述,從而解決一些邏輯分析問題。

1.語法:


2.實例

當我們進入大學的時候,每個同學都會有一個學號(例如我的學號是201235010126)。在我們的大學,學號里面集中了年級,專業代碼,班級代碼,學生編號的種種信息,由此得到每一個同學唯一的ID號。今天這里采用專業年級的例子,由淺入深,講解一個復雜表達式的來源。下面結合自己情況,以所在大學湖南大學保密專業為例,寫一寫學習正則表達式心得。

學號編碼規則:

對201235010126來說:

條件1:1-4位(2012)表示年號

條件2:5-8位(3501)固定是專業號3501

條件3:倒數第三位表示班級號,每個年紀有6個班級

條件4:最后兩位表示班級內學號,每個班有32人

條件5:12級開始倒數第四位補0

2.1實例一:匹配12級保密1班的學生。

正則表達式是:

/^2012350101(?:0[1-9]|[1-2]\d|3[0-2])$/

分析

1."^"匹配開頭,"$"匹配結尾,"|"表示或
2.?:匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以后使用。這在使用或字符“(|)”來組合一個模式的各個部分是很有用.
3.學生學號是01-32,所以拆分成3組:
a)01-09:0[1-9]
b)10-29:[1-2]/d
c)30-32:3[0-2]


2.2實例二:匹配11級保密和12級保密班的全體學生。

/^201(?:13501|235010)1(?:0[1-9]|[1-2]\d|3[0-2])$/

?:是小括號的專利,因為小括號里面的是一組字符


2.3實例三:匹配11級保密6個班和12級保密6個班的所有學生

/^201(?:13501|235010)[1-6](?:0[1-9]|[1-2]\d|3[0-2])$/

()表示把一些代碼組合起來,[]表示把所有的字符組合起來


2.4實例四:匹配2001-2019級的所有學生(假設每個年級6個班,其中2011為分界線,2012級開始倒數第四位補0)

/^20(?:(?:0[1-9]|1[0-1])3501|1[2-9]35010)[1-6](?:0[1-9]|[1-2]\d|3[0-2])$/

分析##

1.條件1-2規定了最后三位,也就是101-632,所以我們可以輕松想到1-6$這樣可以匹配后三位,在這里面01 - 32可以分成3段:

  a)01-09:0[1-9]
  b)10-29:[1-2]/d
  c)30-32:3[0-2]

2.然后我們看前面四位,由於特殊的年份是以11-12年分界的,所以我們說從第3位到倒數第4位都是特殊的,開頭肯定是^20,然后里面根據情況可以分為補0的還是不補為的,所以可以得到(xxx3501|xxx35010),然后我們可以看到第一個XXX表示的是01-11,也即可以寫成(?:0[1-9]|1[01]),第二個表示的是12-19,也即可以直接寫成1[2-9],所以中間一部分是

(?:(?:0[1-9]|1[01])3501|1[2-9]35010)

3.最后:我們就可以得出一個看起來非常高大上的正則表達式了

 /^20(?:(?:0[1-9]|1[0-1])3501|1[2-9]35010)[1-6](?:0[1-9]|[1-2]\d|3[0-2])$/


終於把這個看似高大上的一串正則表達式匹配出來了,其實只要仔細羅列好條件,正則表達式就是xx的oo次的無限組合。O(∩_∩)O~ ~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM