正則表達(dá)式入門(mén)_第1頁(yè)
正則表達(dá)式入門(mén)_第2頁(yè)
正則表達(dá)式入門(mén)_第3頁(yè)
正則表達(dá)式入門(mén)_第4頁(yè)
正則表達(dá)式入門(mén)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

正則表達(dá)式入門(mén)胡張東2014/7引言使用Everything查找關(guān)于正則表達(dá)式的ppt,但又不知道該ppt的具體名稱,可以使用通配符“*”,

*正則表達(dá)式*.ppt,這里的“*”表示了任意字符。引言正則表達(dá)式使用單個(gè)字符串來(lái)描述、匹配一系列符合某個(gè)句法規(guī)則的字符串。在很多文本編輯器里,正則表達(dá)式通常被用來(lái)檢索、替換那些符合某個(gè)模式的文本。說(shuō)簡(jiǎn)單點(diǎn),正則表達(dá)式就是在一堆有規(guī)律的字符中找到你想要的字符。正則測(cè)試工具推薦大家使用裝備軟件自帶的正則表達(dá)式測(cè)試工具,在DLL文件夾下的RegexTest.exe一個(gè)簡(jiǎn)單例子在開(kāi)發(fā)裝備軟件時(shí)要檢查ProductClass、SSID等,通常都是通過(guò)正則表達(dá)式在一堆字符中提取出ProductClass,然后和某一個(gè)固定的值比較。比如要在一堆字符串中找到ProductClassRG200O-CA,源字符串為:

ksdfjProductClasskdfjie:ldfiefRG200O-CAfiesdf,咋一看源字符串沒(méi)有一點(diǎn)規(guī)則可言,但是仔細(xì)觀查可以看到有ProductClass字符串可供定位,而且我們已知ProductClass格式為RG200O-CA,所以可以用正則表達(dá)式“.*ProductClass.*\:.*(\w{6}-\w{2}).*”來(lái)匹配?!?”表示匹配除換行符以外的任意字符,“*”表示前面的“.”匹配零次或更多次,“\”是轉(zhuǎn)義符號(hào),表示后面的“:”就表示冒號(hào),沒(méi)有其它含義,“\w”表示匹配字母或數(shù)字或下劃線或漢字,“{6}”表示匹配前面的“\w”6次,這個(gè)正則表達(dá)式輸出的結(jié)果為小括號(hào)里面的內(nèi)容。一些術(shù)語(yǔ)元字符上一頁(yè)提到了兩個(gè)個(gè)元字符“\w”和“.”,元字符表示一類特殊的字符。接下來(lái)介紹一些其它常用的元字符,這些元字符必須要牢記!代碼說(shuō)明.匹配除換行符以外的任意字符\w匹配字母或數(shù)字或下劃線或漢字\s匹配任意的空白符\d匹配數(shù)字\b匹配單詞的開(kāi)始或結(jié)束^匹配字符串的開(kāi)始$匹配字符串的結(jié)束限定符在前面的例子中使用了“*”和“{6}”限定匹配次數(shù),還有一些其它用于限定匹配次數(shù)的。代碼/語(yǔ)法說(shuō)明*重復(fù)零次或更多次+重復(fù)一次或更多次?重復(fù)零次或一次{n}重復(fù)n次{n,}重復(fù)n次或更多次{n,m}重復(fù)n到m次字符集如果想只匹配aeiou中的一個(gè),使用[aeiou],[0-9]和\d代表的含義相同,同理[a-z0-9A-Z_]也完全等同于\w(如果只考慮英文的話),[.?!]匹配標(biāo)點(diǎn)符號(hào)(.或?或!)正則表達(dá)式解釋\d{3}[fg]ood.+\w{3,6}\s{5,}[0-8]?\d\d*匹配0到9之間的數(shù)字3次匹配food或者good匹配除換行符外任意字符一次或更多次匹配字母或數(shù)字或下劃線或漢字3到6次匹配空格5次或者5次以上匹配0到8零次或者一次匹配0到9一次或者更多次分支條件在中國(guó)有一些特殊號(hào)碼,比如110,119,120,現(xiàn)在我們要匹配這三個(gè)號(hào)碼中的任意一個(gè),可以使用正則表達(dá)式“110|120|119”,其中“|”是分支條件,使用“|”可以把不同的表達(dá)式分割,只要匹配到其中任意一個(gè)即可,匹配是從左到右匹配的,只要匹配到一個(gè)就不往下匹配了。眾所周知IP地址每一位都不能大于255,在寫(xiě)匹配IP地址的正則表達(dá)式時(shí),首先需要解決的是如何匹配0到255之間的數(shù)字!25[0-5]|2[0-4]\d|1\d{2}|\d\d?分組下面是一段Ping返回結(jié)果,要求用一個(gè)正則表達(dá)式取出最小時(shí)延、最大時(shí)延、平均時(shí)延,而且要兼容XP和Win7系統(tǒng)。Win7:最短=1ms,最長(zhǎng)=2ms,平均=3msXP:Minimum=1ms,Maximum=2ms,Average=3ms正則表達(dá)式(Minimum|最短)\s+=\s+(\d+)ms,\s+(Maximum|最長(zhǎng))\s+=\s+(\d+)ms,\s+(Average|平均)\s+=\s+(\d+)ms每一個(gè)小括號(hào)括起來(lái)的都是一個(gè)分組,加上正則表達(dá)式本身就是第0個(gè)分組,所以共有7個(gè)分組Result[0]:Minimum=1ms,Maximum=2ms,Average=3msResult[1]:MinimumResult[2]:1Result[3]:MaximumResult[4]:2Result[5]:AverageResult[6]:3分組分組組號(hào)分配規(guī)則:從左向右,以分組的左括號(hào)為標(biāo)志,第一個(gè)出現(xiàn)的分組的組號(hào)為1,第二個(gè)為2,以此類推。((25[0-5]|2[0-4]\d|1\d{2}|\d\d?)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|\d\d?)上面的正則表達(dá)式使用了“\.”匹配“.”,這里“\”起到了轉(zhuǎn)義的作用,依次類推,可以使用“\?”和“\*”匹配“?”和“*”一個(gè)合法的IPv4地址正則表達(dá)式反義有時(shí)需要查找不屬于某個(gè)能簡(jiǎn)單定義的字符類的字符。比如想查找除了數(shù)字以外,其它任意字符都行的情況,這時(shí)需要用到反義代碼/語(yǔ)法說(shuō)明\W匹配任意不是字母,數(shù)字,下劃線,漢字的字符\S匹配任意不是空白符的字符\D匹配任意非數(shù)字的字符\B匹配不是單詞開(kāi)頭或結(jié)束的位置[^x]匹配除了x以外的任意字符[^aeiou]匹配除了aeiou這幾個(gè)字母以外的任意字符貪婪當(dāng)正則表達(dá)式中包含能接受重復(fù)的限定符時(shí),通常的行為是(在使整個(gè)表達(dá)式能得到匹配的前提下)匹配盡可能多的字符。以這個(gè)表達(dá)式為例:a.*b,它將會(huì)匹配最長(zhǎng)的以a開(kāi)始,以b結(jié)束的字符串。如果用它來(lái)搜索aabab的話,它會(huì)匹配整個(gè)字符串a(chǎn)abab,而不能匹配到aab,這被稱為貪婪匹配。寫(xiě)出一個(gè)正則表達(dá)式匹配以a開(kāi)始,以b結(jié)束的字符串a(chǎn).*b正則表達(dá)式是貪婪的!a.*?b懶惰雖然正則是貪婪的,但有時(shí)我們更需要懶惰匹配,也就是匹配盡可能少的字符。前面給出的限定符都可以被轉(zhuǎn)化為懶惰匹配模式,只要在它后面加上一個(gè)問(wèn)號(hào)?。這樣.*?就意味著匹配任意數(shù)量的重復(fù),但是在能使整個(gè)匹配成功的前提下使用最少的重復(fù)?,F(xiàn)在看看懶惰版的例子吧:a.*?b匹配最短的,以a開(kāi)始,以b結(jié)束的字符串。如果把它應(yīng)用于aabab的話,它會(huì)匹配aab(第一到第三個(gè)字符)和ab(第四到第五個(gè)字符)。代碼/語(yǔ)法說(shuō)明*?重復(fù)任意次,但盡可能少重復(fù)+?重復(fù)1次或更多次,但盡可能少重復(fù)??重復(fù)0次或1次,但盡可能少重復(fù){n,m}?重復(fù)n到m次,但盡可能少重復(fù){n,}?重復(fù)n次以上,但盡可能少重復(fù)一些例子聽(tīng)到這可能已經(jīng)被我繞暈了,如果你沒(méi)有暈而且還全部掌握了,那么我只能說(shuō)我講的太生動(dòng)了,接下來(lái)通過(guò)一些例子來(lái)鞏固下。匹配要求正則表達(dá)式格式為2014/4/24的日期\d{1,4}/(1[0-2]|0?[1-9])/(3[01]|[21]\d|0?[1-9])格式為XX:XX:XX:XX:XX:XX的MAC地址(([0-9a-fA-F]){4}\.){2}(([0-9a-fA-F]){4})格式為XXXX.XXXX.XXXX的MAC地址(([0-9a-fA-F]){2}\:){5}(([0-9a-fA-F]){2})格式為ChinaNet-XXXX的SSID,X采用0-9、a-z、A-ZChinaNet-([0-9a-zA-Z]){4}格式為HGU421Nv3的ProductClass

\w{7}\s\w{2}格式為Apr15201420:55:34的編譯時(shí)間

\w{3}\s*(3[01]|[21]\d|0?[1-9])\s*\d{4}\s*(2[0-4]|1\d|0?[1-9]):(60|[1-5]\d|0?[1-9]):(60|[1-5]\d|0?[1-9])正數(shù)、負(fù)數(shù)和小數(shù)

[+-]?\d+\.\d+以ing結(jié)尾的單詞\b(\w+)ing\b格式為huzhangdong@的姓名

(\w+)@零寬斷言在上一頁(yè)使用正則表達(dá)式\b(\w+)ing\b匹配以ing為結(jié)尾的單詞,如果源字符串是“reading”,那么匹配出來(lái)的結(jié)果有兩個(gè)分組,分組0代表整個(gè)表達(dá)式reading,分組1是小括號(hào)(\w+)里面的內(nèi)容read,如果想分組0的結(jié)果為read該怎么辦?此時(shí)就需要用到零寬斷言了。什么是零寬斷言呢?正則表達(dá)式\b(\w+)(?=ing\b)匹配出來(lái)的結(jié)果是read,(?=ing)是零寬度正預(yù)測(cè)先行斷言,它斷言自身出現(xiàn)的位置的后面能匹配表達(dá)式ing,不包含ing。正則表達(dá)式(?<=read)(\w+)匹配出來(lái)的結(jié)果是ing,(?<=read)是零寬度正回顧后發(fā)斷言,它斷言自身出現(xiàn)的位置的前面能匹配表達(dá)式read,不包含read。負(fù)向零寬斷言匹配一個(gè)單詞,該單詞里面出現(xiàn)了a,但是a后面不是b。\b\w*a[^b]\w*\b上面的正則表達(dá)式\b\w*a(?!b)\w*\b使用了負(fù)向零寬斷言中的零寬度負(fù)預(yù)測(cè)先行斷言,正則表達(dá)式(?!b)即斷言此位置的后面不能匹配表達(dá)式bfaccbfaccb\b\w*a[^b]??\w*\bfaccbfa\b\w*a[^b]??

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論