正則表達(dá)式入門ailk_第1頁
正則表達(dá)式入門ailk_第2頁
正則表達(dá)式入門ailk_第3頁
正則表達(dá)式入門ailk_第4頁
正則表達(dá)式入門ailk_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、曹利鋒正則表達(dá)式是什么正則表達(dá)式是什么 描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某個子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。 一個正則表達(dá)式就是由普通字符(例如字符 a 到 z)以及特殊字符(稱為元字符)組成的文字模式。該模式描述在查找文字主體時待匹配的一個或多個字符串。正則表達(dá)式作為一個模板,將某個字符模式與所搜索的字符串進(jìn)行匹配。 我們用過的最簡單的規(guī)則:文件查找通配符:“?”和“*”正則表達(dá)式的作用1. 測試字符串的某個模式。例如,可以對一個輸入字符串進(jìn)行測試,看在該字符串是否存在一個電話號碼模式或一個信用卡號碼模式。這稱為數(shù)據(jù)有效性驗證。 2. 替

2、換文本??梢栽谖臋n中使用一個正則表達(dá)式來標(biāo)識特定文字,然后可以全部將其刪除,或者替換為別的文字。 3. 根據(jù)模式匹配從字符串中提取一個子字符串??梢杂脕碓谖谋净蜉斎胱侄沃胁檎姨囟ㄎ淖?。 第一個正則表達(dá)式第一個正則表達(dá)式 從英文小說中查找 hi 但不能把him,high,history也找到,可以用bhib b表示匹配一個單詞邊界,如果是 bhiw*,那就找到了him,high,history 假如你要找的是hi后面不遠(yuǎn)處跟著一個Lucy,你應(yīng)該用bhib.*bLucyb。 其中,.*連在一起就意味著任意數(shù)量的不包含換行的字符。第二個正則表達(dá)式 三位區(qū)號八位機(jī)號的電話號碼 0dd-ddddddd

3、d 其中d指的是數(shù)字 可以簡化為: 0d2-d8 中表示的是重復(fù)的次數(shù)。我們走到哪了?我們現(xiàn)在有以下正則表達(dá)式的元字符bwd.*這些都是什么意思?更進(jìn)一步 d+匹配1個或更多連續(xù)的數(shù)字。下限是至少一次。 而*的下限是0次 再例: bw6b 匹配剛好6個字母/數(shù)字的單詞。常用的元字符 代碼代碼 說明說明 . 匹配除換行符以外的任意字符 w 匹配字母或數(shù)字或下劃線或漢字 s 匹配任意的空白符 d 匹配數(shù)字 b 匹配單詞的開始或結(jié)束 匹配字符串的開始 $ 匹配字符串的結(jié)束匹配QQ號 QQ號最少是5個數(shù)字,目前最長是12位數(shù)字字符轉(zhuǎn)義 要匹配正則表達(dá)式中用的字符,如 這就需要轉(zhuǎn)義,應(yīng)當(dāng)寫成 類似,我們

4、還有:. * + 等等常用的限定符 代碼代碼/語法語法 說明說明 *重復(fù)零次或更多次 +重復(fù)一次或更多次 ?重復(fù)零次或一次 n重復(fù)n次 n,重復(fù)n次或更多次 n,m重復(fù)n到m次字符范圍 xyz字符集合。匹配所包含的任意一個字符。 a-z字符范圍。匹配指定范圍內(nèi)的任意字符。 所以 0-9代表的含意與d就是完全一致 同理 a-z0-9A-Z_ 也完全等同于w (當(dāng)然,這種等同只能僅考慮英文) 例子:1.QQ號改正:QQ后首位不能為0 2.匹配(010)88886666,或02912345678反義 反義,有定義的元字符大寫,即是反義,同樣,字符集前加上也是反義。所以:代

5、碼代碼/語法語法 說明說明W匹配任意不是字母,數(shù)字,下劃線,漢字的字符S匹配任意不是空白符的字符D匹配任意非數(shù)字的字符B匹配不是單詞開頭或結(jié)束的位置x匹配除了x以外的任意字符a-z負(fù)值字符范圍。匹配任何不在指定范圍內(nèi)的任意字符。并列 用|表示或者,把每一個規(guī)則分開,用|合并為一組共用。 例子:電話號碼可以是3位區(qū)號8位號碼,或4位區(qū)號7位號碼022-223344550477-7192112分組 字符可以指定重復(fù)次數(shù),規(guī)則表達(dá)式如何指定重復(fù)次數(shù)? IP地址(d1,3.)3d1,3 (d1,3.)這部分是1到3位數(shù)字加“.”,用括號表示為一個子表達(dá)式,并且3表示重復(fù)3次。后向引用后向引用 使用小括

6、號指定一個子表達(dá)式后,匹配這個子表達(dá)式的文本(也就是此分組捕獲的內(nèi)容)可以在表達(dá)式或其它程序中作進(jìn)一步的處理。默認(rèn)情況下,每個分組會自動擁有一個組號,規(guī)則是:從左向右,以分組的左括號為標(biāo)志,第一個出現(xiàn)的分組的組號為1,第二個為2,以此類推。 組號保存的結(jié)果,實際如同程序中變量或數(shù)組保存數(shù)據(jù)一樣。對組號的調(diào)用,如果是使用變量。后向引用示例后向引用示例 后向引用用于重復(fù)搜索前面某個分組匹配的文本。例如,1代表分組1匹配的文本。難以理解?請看示例: b(w+)bs+1b可以用來匹配重復(fù)的單詞,像go go, kitty kitty。首先是一個單詞,也就是單詞開始處和結(jié)束處之間的多于一個的字母或數(shù)字(

7、b(w+)b),然后是1個或幾個空白符(s+),最后還是前面匹配的那個單詞(1)。命名分組命名分組 ()內(nèi)的子表達(dá)式,不僅可以用編號,也可以用名稱,如同變量有變量名。 (?w+) (?Wordw+) 或內(nèi)均是分組名稱,這樣。下面的例子: b(?w+)bs+kb (?#變量聲明標(biāo)志W(wǎng)ord #變量名w+#表達(dá)式) 分組語法分組語法-捕獲捕獲 (exp)匹配exp,并捕獲文本到自動命名的組里 (?exp)匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?nameexp) (?:exp)匹配exp,不捕獲匹配的文本,也不給此分組分配組號零寬斷言表達(dá)式結(jié)構(gòu):(?=exp)匹配exp前面的位置

8、,即某表達(dá)式后面是exp(?=exp)匹配exp后面的位置,即某表達(dá)式前面是exp(?!exp)匹配后面跟的不是exp的位置,即某表達(dá)式后面不是exp(?!exp)匹配前面不是exp的位置,即某表達(dá)式前面不是exp 實例 bw+(?=ingb),匹配以ing結(jié)尾的單詞的前面部分(除了ing以外的部分):dancing,reading (?=bre)w+b會匹配以re開頭的單詞的后半部分(除了re以外的部分),read, return注釋 小括號的另一種用途是能通過語法(?#comment)來包含注釋。 如: (d1,2(?#0-99)|1dd(?#100-199)|20-4d(?#200-24

9、9)|250-5.)3(?#250-255) (d1,2 (?#-0-99) |1dd (?#100-199) |20-4d(?#200-249)|250-5)(?#250-255)$ 貪婪與懶惰 當(dāng)正則表達(dá)式中包含能接受重復(fù)的限定符時,通常的行為是(在使整個表達(dá)式能得到匹配的前提下)匹配盡可盡可能多能多的字符。 考慮這個表達(dá)式:a.*b,它將會匹配最長的以a開始,以b結(jié)束的字符串。如果用它來搜索aabab的話,它會匹配整個字符串a(chǎn)abab。這被稱為貪婪匹配。貪婪與懶惰 有時,我們更需要懶惰匹配,也就是匹配盡可盡可能少能少的字符。 前面給出的限定符都可以被轉(zhuǎn)化為懶惰匹配模式,只要在它后面加上一

10、個問號?。這樣.*?就意味著匹配任意數(shù)量的重復(fù),但是在能使整個匹配成功的前提下使用最少的重復(fù)。貪婪與懶惰 對于aabab a.*?b匹配最短的,以a開始,以b結(jié)束的字符串。如果把它應(yīng)用于aabab的話,它會匹配aab和ab(為什么第一個匹配是aab而不是ab?簡單地說,因為正則表達(dá)式有另一條規(guī)則,比懶惰貪婪規(guī)則的優(yōu)先級更高:最先開始的匹配最有最大的優(yōu)先權(quán)懶惰限定符 *?重復(fù)任意次,但盡可能少重復(fù) +?重復(fù)1次或更多次,但盡可能少重復(fù) ?重復(fù)0次或1次,但盡可能少重復(fù) n,m? 重復(fù)n到m次,但盡可能少重復(fù) n,?重復(fù)n次以上,但盡可能少重復(fù)優(yōu)先級順序 操作符 描述 轉(zhuǎn)義符 (), (?:),

11、(?=), 圓括號和方括號 *, +, ?, n, n, n,m 限定符 , $位置和順序 | “或”操作 JS中的應(yīng)用 1.js里面通過RegExp類來實現(xiàn)正則表達(dá)式的。 /匹配串中第一個catvar reCat = new RegExp(cat); /匹配串中所有的catvar reCat = new RegExp(cat,g); /匹配串中所有的cat,不區(qū)分大消息 var reCat = new RegExp(cat,gi); var reCat = /cat/gi; /perl風(fēng)格JSJS中的應(yīng)用中的應(yīng)用2.RegExp的方法 (1)test() 判斷是否匹配,返回 true 或者

12、false var sTomatch =cat; var reCat = /cat/; alert(reCat.test(sTomatch);/outputs true (2)exec() 返回一個數(shù)組,數(shù)組中的第一個條目是第一個匹配 var sTomatch = a bat, a Cat, a fAt baT, a faT cat; var reAt = /at/; var arrMatches = reAt.exec(sTomatch); alert(arrMatches.toString(); /outputs atJS中的應(yīng)用String對象對正則表達(dá)式的支持 (1)match()方法

13、 var sTomatch = a bat, a Cat, a fAt baT, a faT cat; var reAt = /at/gi; var arrMatches = sTomatch.match(reAt); alert(arrMatches.toString(); /outputs at,at, At ,aT ,aT ,at; JS中的應(yīng)用(2)replace()方法 var sToChange = “this red paper is not very red”; alert(sToChange.replace(“red”,“blue”); 只替換第一個“red”,outputs “this blue paper is not very red”要想全部替換,使用全程修正符,如下: var sToChange = this red paper is not very red; var reRed = /red/gi; alert(sToChange.replace(reRed,blue);JSJS中的應(yīng)用中的應(yīng)用 (3)split()方法 var sColor = “

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論