![完整版正則表達式和字符串處理全_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/514c73f9-daf9-4fc9-aaa1-5750b1b2575a/514c73f9-daf9-4fc9-aaa1-5750b1b2575a1.gif)
![完整版正則表達式和字符串處理全_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/514c73f9-daf9-4fc9-aaa1-5750b1b2575a/514c73f9-daf9-4fc9-aaa1-5750b1b2575a2.gif)
![完整版正則表達式和字符串處理全_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/514c73f9-daf9-4fc9-aaa1-5750b1b2575a/514c73f9-daf9-4fc9-aaa1-5750b1b2575a3.gif)
![完整版正則表達式和字符串處理全_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/514c73f9-daf9-4fc9-aaa1-5750b1b2575a/514c73f9-daf9-4fc9-aaa1-5750b1b2575a4.gif)
![完整版正則表達式和字符串處理全_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/514c73f9-daf9-4fc9-aaa1-5750b1b2575a/514c73f9-daf9-4fc9-aaa1-5750b1b2575a5.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、正則表達式和字符串處理(全)第一章正則表達式概述正則表達式(RegularExpression)起源于人類神經(jīng)系統(tǒng)的研究。正則表達式的定義有以下幾種:用某種模式去匹配一類字符串的公式,它主要是用來描述字符串匹配的工具。描述了一種字符串匹配的模式??梢杂脕頇z查字符串是否含有某種子串、將匹配的子串做替換或者從中取出符合某個條件的子串等。由普通字符(a-z)以及特殊字符(元字符)組成的文字模式,正則表達式作為一個模版,將某個字符模式與所搜索的字符串進行匹配。用于描述某些規(guī)則的的工具。這些規(guī)則經(jīng)常用于處理字符串中的查找或替換字符串。也就是說正則表達式就是記錄文本規(guī)則的代碼。用一個字符串來描述一個特征,
2、然后去驗證另一個字符串是否符合這個特征。以上這些定義其實也就是正則表達式的作用。第二章正則表達式基礎(chǔ)理論這些理論將為編寫正則表達式提供法則和規(guī)范,正則表達式主要包括以下基礎(chǔ)理論:元字符字符串字符轉(zhuǎn)義反義限定符替換分組反向引用零寬度斷言匹配選項注釋優(yōu)先級順序遞歸匹配2. 1元字符在正則表達式中,元字符(Metacharacter)是一類非常特殊的字符,它能夠匹配一個位置或字符集合中的一個字符,如:、w等。根據(jù)功能,元字符可以分為兩種類型:匹配位置的元字符和匹配字符的元字符。2.1 .1匹配位置的元字符包括:人、$、和b。其中人(脫字符號)和$(美元符號)都匹配一個位置,分別匹配行的開始和結(jié)尾。比
3、如,4string匹配以string開頭的行,string$匹配以string結(jié)尾的行。Astring$匹配以string開始和結(jié)尾的行。單個$匹配一個空行。單個人匹配任意行。b匹配單詞的開始和結(jié)尾,如:bstr匹配以str開始的單詞,但b不匹配空格、標點符號或換行符號,所以,bstr可以匹配string>stringfomat等單詞。bstr正則表達式匹配的字符串必須以str開頭,并且str以前是單詞的分界處,但此正則表達式不能限定str之后的字符串形式。以下正則表達式匹配以ing結(jié)尾的字符串,如string>Thisisastring等Ingb正則表達式ingb匹配的字符串必須
4、以ing結(jié)尾,并且ing后是分界符,以下正則表達式匹配一個完整的單詞:bstringb。2.2 .2匹配字符的元字符匹配字符的元字符有7個:.(點號)、w、W、S、d和D。其中點號匹配除換行之外的任意字符;w匹配單詞字符(包括字母、漢字、下劃線和數(shù)字);W匹配任意非單詞字符、s匹配任意的空白字符,如空格、制表符、換行等;S匹配任意的非空白字符;d匹配任意數(shù)字字符;D匹配任意的非數(shù)字字符。如:'.$匹配一個非空行,在該行中可以包含除了換行符以外的任意字符。Nw$匹配一個非空行,并且該行中只能包含字母、數(shù)字、下劃線和漢字中的任意字符。ibawwwwwwb匹配以字母a開頭長度等于7的任意單詞
5、ibawwwdddDb匹配以字母a開頭后面有3個字符三個數(shù)字和1個非數(shù)字字符長度等于8的單詞2.3 字符類字符類是一個字符集合,如果該字符集合中的任何一個字符被匹配,則它會找到該匹配項。字符類可以在口(方括號)中定義。如:012345可以匹配數(shù)字0到5中的任意一個。<H123456>可以匹配HTML標簽中的H1至UH6。Jjack可以匹配字符串Jack或jack。但是,由于表達式0123456789書寫非常不方便,連字符(-)便應(yīng)用而生,0-9等價于0123456789。a-z匹配任何小寫字母,A-Z匹配任意大寫字母。如果要在字符類中包含連字符,則必須包含在第一位,如:卜a表示表達
6、式匹配-或者a。在字符類中如果人是字符類的第一個字符表示否定該字符串,也就是匹配該字符串外的任意字符,如:Fabc匹配除了abc以外的任意字符,F(xiàn)-匹配除了連字符以外的任意字符,aFb匹配a之后不是b的字符串。表2-1常用的字符類子符或表達式說明w匹配單詞字符(包括字母、數(shù)字、下劃線和漢字)W匹配任意的非單詞字符(包括字母、數(shù)字、下劃線和漢字)s匹配任意的空白字符,如空格、制表符、換行符、中文全角空格等S匹配任意的非空白字符d匹配任意數(shù)字D匹配任意的非數(shù)字字符abc匹配字符集中的任何字符Aabc匹配除了字符集中包含字符的任意字符0-9a-z_A-Z匹配任何數(shù)字、字母、下劃線。等同于wpname
7、匹配name指定的命名字符類中的任何字符Pname匹配除name指te的而名子付類中之外的任何子付.匹配除了換行符號之外的任意字符A0-9a-zA-Z等同于W2.4 字符轉(zhuǎn)義表2-2:常用的轉(zhuǎn)義字符表iA式可匹配r,n代表回車和換行符t制表符代表""本身還有其他一些在后邊章節(jié)中有特殊用處的標點符號,在前面加""后,就代表該符號本身。比如:人,$都有特殊意義,如果要想匹配字符串中"人"和"$"字符,則表達式就需要寫成"A"和"$"。表iA式可匹配A匹配八符號本身$匹配$符號本身
8、.匹配小數(shù)點(.)本身2.5 反義在使用正則表達式時,如果需要匹配不在字符類指定的范圍內(nèi)的字符時,可以使用反義規(guī)則。其實我們已經(jīng)使用過反義表達式,如W、S、D、Fabc等。常用的反義表如下:表2-3:常用的反義表達式子符或表達式說明W匹配任意不是字母,數(shù)字,卜劃線,漢字的字符S匹配任意不是空白符的字符D匹配任意非數(shù)字的字符B匹配不是單詞開頭或結(jié)束的位置Ax匹配除了x以外的任意字符Aaeiou匹配除了aeiou這幾個字母以外的任意字符2.4限定符正則表達式的元字符一次只能匹配一個位置或一個字符,如果需要匹配零個一個或多個字符時,則需要使用限定符。限定符用于指定允許特定字符或字符集自身重復(fù)出現(xiàn)的次
9、數(shù)。如n表示出現(xiàn)n次;n,表示重復(fù)至少n次;n,m表示至少出現(xiàn)n次最多m次。常用限定符如下表:表2-4:常用限定符字符描述*匹配前面的子表達式零次或多次。例如,zo*能匹配"z"以及價于0,。"zoo"。*等+匹配前面的子表達式一次或多次。例如,但不能匹配"z"。+等價于1,。'zo+'能匹配"zo"以及"zoo",?匹配前面的子表達式零次或一次。例如,"does"中的"do"。?等價于0,1。"do(es)?"可以匹配
10、"do"或nn是一個非負整數(shù)。匹配確定的n次。例如,'o2不能匹配"Bob"中的'o',但是能匹配"food"中的兩個o。n,n是一個非負整數(shù)。至少匹配n次。例如,'o2,不能匹配"Bob"中的'o',但能匹配"foooood"中的所有o。'o1,'等價于o+'。'o0,'則等價于'o*'。n,m)m和n均為非負整數(shù),其中n<=mi最少匹配n次且最多匹配m次。劉,"o1,3&q
11、uot;將匹配"fooooood"中的前二個o。o0,1'等價于'o?'。請注意在逗號和兩個數(shù)之間不能有空格。*?盡可能少的使用重復(fù)的第一個匹配+?盡可能少的使用重復(fù)但至少使用一次?如果有PJ能使用零次重復(fù)或一次重復(fù)。n?等同于nn,?盡可能少的使用重復(fù)但至少重復(fù)n次n,m?介于n次和m次之間,盡可能少的使用重復(fù)。2.6 貪婪、惰性和支配性匹配惰性匹配:先看字符串中的第一個字母是不是一個匹配,如果單獨一個字符還不夠就讀入下一個字符,如果還沒有發(fā)現(xiàn)匹配,就不斷地從后續(xù)字符中讀取,只道發(fā)現(xiàn)一個合適的匹配,然后開始下一次的匹配。貪婪匹配:先看整個字符串是不
12、是一個匹配,如果沒有發(fā)現(xiàn)匹配,它去掉字符串中最后一個字符并再次嘗試,如果還沒有發(fā)現(xiàn)匹配,那么再次去掉最后一個字符,這個過程會一直重復(fù)直到發(fā)現(xiàn)一個匹配或字符串不剩一個字符為止。支配性匹配:只嘗試匹配整個字符串,如果整個字符串不能產(chǎn)生一個匹配,則不再進行嘗試。我們普通的字符類均是貪婪匹配,如果在字符類后加個問號(?)則表示懶惰匹配,要成為支配性匹配則在懶惰匹配后加個問號(?).2.7 替換正則表達式0d2-d8和0d3-d7分別匹配區(qū)號為3位和4位的固定電話號碼,如果需要同時匹配區(qū)號為3位和4位的固定電話號碼,可以使用替換滿足這一需求。最簡單的替換是使用豎線(|)表示。以下表達式匹配了區(qū)號為3位號
13、碼為8位和區(qū)號為4位號碼為7位的的電話號碼,區(qū)號和號碼均使用-連接,0d2-d8|0d3-d7表2-5常用替換子符或表達式說明I匹配豎線(|)左側(cè)或右側(cè)(?(表達式)yes|no)表達式要么與yes部分匹配要么與no部分匹配,其中no部分可以省略。(?(name)yes|no)以name命名的字符串要么與yas部分匹配,要么與no部分pp,其中no部分可以省略2.8 分組分組又稱為子表達式,即把一個正則表達式的全部或部分分成一個或多個組。其中分組使用圓括號0,分組后把圓括號中的表達式看做一個整體來處理,比如:(abc)1,2表示abc出現(xiàn)一次或兩次的字符串,其中把abc看做一個整體來進行匹配。
14、2.9 后向引用當一個正則表達式被分組后,每一個組將自動被賦予一個組號,該組號可以代表該組的表達式。其中,組號的編制規(guī)則為:從左到右,以分組的左括號為標志,第一個組號為1,第二個分組號為2,以此類推。如:(A?(B?(C?)將產(chǎn)生3個組號,第一組為:(A?(B?(C?);第二組為:(B?(C?);第三組為:(C?)。反向引用提供了查找重復(fù)字符組的方便方法,反向引用可以使用數(shù)字命名(默認名稱)的組號,也可以使用指定命名的組號。比如:b(w)1b匹配兩個字符一樣的單詞,此表達式和b(w)wb不一樣,后者兩個字符可以不一樣。再看,b(w)(d)12b,匹配一個字符和一個數(shù)字然后重復(fù)字符和數(shù)字。bw*
15、(w+)1b匹配以至少兩個字符一樣結(jié)尾的單詞。b(w+)bs+1b此正則表達式匹配的具體過程如下:a.表達式b(w+)b匹配一個單詞并且單詞的長度至少為1b.表達式s+匹配一個或多個空白字符c.表達式1將重復(fù)子表達式(w+)匹配的內(nèi)容,及匹配重復(fù)的單詞d.匹配單詞的結(jié)束位置。分組不僅可以使用數(shù)字作為組號,還可以使用自定義名稱作為組號。以下兩個正則表達式都是將分組后的子表達式w+命名為word.(?<word>w+)(?'wordw+)因此b(w+)bs+1b和以下正則表達式是等價的,都匹配重復(fù)的單詞:b(?<word>w+)bs+k<word>b表2
16、-5后向引用說明表表達式說明數(shù)字使用數(shù)字命名的后向引用k<name>使用指定命名的后向引用表2-6常用分組說明字符說明(expression)匹配子符串expression,并將匹配的文本保存到自動而名的組里(?<nane>expression)匹配子符串expression,并將匹配的文本保存到以name命名的變量中,該名稱不能包含標點符號,不能以數(shù)字開頭。(?:expression)匹配子符串expression,不保存匹配的文本,也不分配組號(?!expression)匹配后面不是子符串expression的位直(?=expression)匹配子符串express
17、ion前回的位直(?<=expression)匹配子符串expression后面的位置(?<!expression)匹配前面不是字符串expression的位直(?>expression)只匹配expression次2.10 寬度斷言元字符人、b、$都匹配一個位置,并且這個位置滿足一定條件。在此把滿足一個條件稱為斷言或零寬度斷言。正則表達式中零寬度斷言說明如下表:表2-6零寬度斷言字符(斷言)說明A匹配行的開始位置$匹配行的結(jié)束位置A匹配必須出現(xiàn)在字符串的開頭Z匹配必須出現(xiàn)在字符串的結(jié)尾或字符串結(jié)尾處的換行符(n)前z匹配必須出現(xiàn)在字符串的結(jié)尾G匹配必須出現(xiàn)在上個匹配結(jié)束的地
18、方b匹配單詞的開始或結(jié)束的位置B匹配不是單詞的開始或結(jié)束的位置表達式(?=expression)、(?!expression)、(?<=expression)、和(?<!expression)者B是匹配個位置。下面將詳細介紹表達式(?=expression)和(?<=expression)。(?=expression)又稱為零寬度正預(yù)測先行斷言,它斷言自身位置的前面能夠匹配表達式expression。以下正則表達式匹配以ed結(jié)尾的單詞的前面部分:bw+(?=edb)。(?<=expression)又稱為零寬度正回顧后發(fā)斷言,它斷言自身位置的后面能夠匹配表達式expres
19、sion,以下正則表達式匹配以an開頭的單詞的后面部分,即匹配單詞除了字符串a(chǎn)n之外的部分:(?<=ban)w+b2.11 負向零寬度斷言零寬度斷言只能指定或匹配一個位置,而負向零寬度斷言與零寬度斷言正好相反,它能指定或匹配不是一個位置,即所說的反義。特別是在匹配字符串中不包含指定的字符時,負向零寬度斷言特別有用,比如要匹配斷言字符a之后不能是字符b的表達式為:bw*a(?!b)w*b因此該表達式匹配一個單詞,并且這個包含字符a并且a后面不是緊隨著b表達式(?!expression)稱為負向零寬度斷言,它斷言自身位置后不能包含expression。以下正則表達式匹配一個z字符串,字符串前
20、三位為字符并且后邊不是緊隨著數(shù)字:bw3(?!d+);表達式(?<!expression)稱為零寬度回顧后發(fā)斷言,它斷言自身位置的前面不能匹配字符串expression。以下表達式匹配不以數(shù)字開頭、并且字符串中只包含大寫字母、小寫字母或下劃線。(?<!d+)a-z-A-Z+2.12 匹配選項匹配選項可以指定正則表達式匹配中的行為,如忽略大小寫、處理多行、處理單行、從右到左開始匹配等。常用的匹配選項如下:表2-7常用匹配選項RegexOptions枚舉值內(nèi)聯(lián)標志簡單說明ExplicitCapturen只有定義了命名或編號的組才捕獲gnoreCasei小區(qū)分大小寫gnorePatter
21、nWhitespacex消除模式中的非轉(zhuǎn)義空白并啟用由#標記的注釋。MultiLinem多行模式,其原理是修改了A和$的含義SingleLines單行模式,和MultiLine相對應(yīng)2.13 優(yōu)先級正則表達式從左到右進行計算,并遵循優(yōu)先級順序,這與算術(shù)表達式非常類似。下表從最高到最低說明了各種正則表達式運算符的優(yōu)先級順序:表2-8:優(yōu)先級說明運算符說明轉(zhuǎn)義符(),(?:),(?=),括號和中括號*,+,?,n,n,n,m限定符anymetacharacter,anycharacter定位點和序列1替換字符的優(yōu)先級比替換運算符高,替換運算符允許m|food與m或food匹配。右嚶匹配"mood'或"food,”請使用括號創(chuàng)建子表達式,從而產(chǎn)生"(m|f)00d2.12遞歸匹配遞歸匹配在匹配具有嵌套結(jié)構(gòu)的字符串時特別有效。比如算術(shù)表達式(1+2)*(3+4)具有嵌套結(jié)構(gòu),如果要使用正則表達式檢查該表達式是否正確,則可以使用遞歸匹配解決該問題。這里介紹的平衡組語法是由.NetFramework支持的;其它語言/庫不一定支持這種功能,或者支持此功能但需要使用不同的語法。有時我們需要匹配像(100*(50+15)這樣的可嵌套的層次性結(jié)構(gòu),這時簡單地使用(.+)則只會匹配到最左邊的左括號和最右邊的右括號之間的內(nèi)容(這里我們討論的是貪婪模式,懶惰模式也有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中通冷鏈加盟合同范例
- 企業(yè)聘請法人合同范例
- 推動創(chuàng)新技術(shù)在醫(yī)療健康領(lǐng)域的應(yīng)用
- 隧道施工中充填材料的選擇標準
- 1992賣房合同范例
- 勞務(wù)合同范例新
- 公司個人收購合同范例
- 中介房屋補充合同范例
- 供貨合同范例教程
- 制造涼米倉合同范例
- 四川省自貢市2024-2025學年上學期八年級英語期末試題(含答案無聽力音頻及原文)
- 2025年生物安全年度工作計劃
- 通用電子嘉賓禮薄
- 薪酬專員崗位月度KPI績效考核表
- 技能大賽題庫(空分)
- 污水處理廠設(shè)備的操作規(guī)程(完整版)
- GB/T 28419-2012風沙源區(qū)草原沙化遙感監(jiān)測技術(shù)導則
- GB/T 22077-2008架空導線蠕變試驗方法
- DDI領(lǐng)導力-高績效輔導課件
- 水泥罐安裝與拆除專項施工方案
- 大學語文課件(完整版)
評論
0/150
提交評論