正則表達式和字符_第1頁
正則表達式和字符_第2頁
正則表達式和字符_第3頁
正則表達式和字符_第4頁
正則表達式和字符_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一、正則表達式除非您以前使用過正則表達式,否則您可能不熟悉此術語。但是,毫無疑問,您已經使用過不涉及腳本的某些正則表達式概念。正則表達式示例例如,您很可能使用 ? 和 * 通配符來查找硬盤上的文件。通配符匹配文件名中的單個字符,而 * 通配符匹配零個或多個字符。像 data?.dat 這樣的模式將查找下列文件:data1.datdata2.datdatax.datdataN.dat使用 * 字符代替 ? 字符擴大了找到的文件的數量。data*.dat 匹配下列所有文件:data.datdata1.datdata2.datdata12.datdatax.datdataXYZ.dat盡管這種搜索方

2、法很有用,但它還是有限的。和 * 通配符的能力引入了正則表達式所依賴的概念,但正則表達式功能更強大,而且更加靈活。二、正則表達式語法正則表達式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”)。模式描述在搜索文本時要匹配的一個或多個字符串。正則表達式示例表達式匹配/s*$/匹配空行。/d2-d5/驗證由兩位數字、一個連字符再加 5 位數字組成的 ID 號。/*)?sS*/匹配 HTML 標記。下表包含了元字符的完整列表以及它們在正則表達式上下文中的行為:字符說明將下一字符標記為特殊字符、文本、反向引用或八進制轉義符。例如,“n”匹配字符“n”。“n”匹配換

3、行符。序列“”匹配“”,“(”匹配“(”。匹配輸入字符串開始的位置。如果設置了RegExp對象的Multiline屬性, 還會與“n”或“r”之后的位置匹配。$匹配輸入字符串結尾的位置。如果設置了RegExp對象的Multiline屬性,$ 還會與“n”或“r”之前的位置匹配。*零次或多次匹配前面的字符或子表達式。例如,zo* 匹配“z”和“zoo”。* 等效于 0,。+一次或多次匹配前面的字符或子表達式。例如,“zo+”與“zo”和“zoo”匹配,但與“z”不匹配。+ 等效于 1,。?零次或一次匹配前面的字符或子表達式。例如,“do(es)?”匹配“do”或“does”中的“do”。? 等效

4、于 0,1。nn是非負整數。正好匹配n次。例如,“o2”與“Bob”中的“o”不匹配,但與“food”中的兩個“o”匹配。n,n是非負整數。至少匹配n次。例如,“o2,”不匹配“Bob”中的“o”,而匹配“foooood”中的所有 o。“o1,”等效于“o+”。“o0,”等效于“o*”。n,mM和n是非負整數,其中n=m。匹配至少n次,至多m次。例如,“o1,3”匹配“fooooood”中的頭三個 o。o0,1 等效于 o?。注意:您不能將空格插入逗號和數字之間。?當此字符緊隨任何其他限定符(*、+、?、n、n,、n,m)之后時,匹配模式是“非貪心的”。“非貪心的”模式匹配搜索到的、盡可能短的

5、字符串,而默認的“貪心的”模式匹配搜索到的、盡可能長的字符串。例如,在字符串“oooo”中,“o+?”只匹配單個“o”,而“o+”匹配所有“o”。.匹配除“n”之外的任何單個字符。若要匹配包括“n”在內的任意字符,請使用諸如“sS”之類的模式。(pattern)匹配pattern并捕獲該匹配的子表達式。可以使用$0$9屬性從結果“匹配”集合中檢索捕獲的匹配。若要匹配括號字符 ( ),請使用“(”或者“)”。(?:pattern)匹配pattern但不捕獲該匹配的子表達式,即它是一個非捕獲匹配,不存儲供以后使用的匹配。這對于用“or”字符 (|) 組合模式部件的情況很有用。例如,industr(

6、?:y|ies) 是比 industry|industries 更經濟的表達式。(?=pattern)執行正向預測先行搜索的子表達式,該表達式匹配處于匹配pattern的字符串的起始點的字符串。它是一個非捕獲匹配,即不能捕獲供以后使用的匹配。例如,Windows (?=95|98|NT|2000) 匹配“Windows 2000”中的“Windows”,但不匹配“Windows 3.1”中的“Windows”。預測先行不占用字符,即發生匹配后,下一匹配的搜索緊隨上一匹配之后,而不是在組成預測先行的字符后。(?!pattern)執行反向預測先行搜索的子表達式,該表達式匹配不處于匹配pattern

7、的字符串的起始點的搜索字符串。它是一個非捕獲匹配,即不能捕獲供以后使用的匹配。例如,Windows (?!95|98|NT|2000) 匹配“Windows 3.1”中的 “Windows”,但不匹配“Windows 2000”中的“Windows”。預測先行不占用字符,即發生匹配后,下一匹配的搜索緊隨上一匹配之后,而不是在組成預測先行的字符后。x|y匹配x或y。例如,z|food 匹配“z”或“food”。(z|f)ood 匹配“zood”或“food”。xyz字符集。匹配包含的任一字符。例如,“abc”匹配“plain”中的“a”。xyz反向字符集。匹配未包含的任何字符。例如,“abc”匹

8、配“plain”中的“p”。a-z字符范圍。匹配指定范圍內的任何字符。例如,“a-z”匹配“a”到“z”范圍內的任何小寫字母。a-z反向范圍字符。匹配不在指定的范圍內的任何字符。例如,“a-z”匹配任何不在“a”到“z”范圍內的任何字符。b匹配一個字邊界,即字與空格間的位置。例如,“erb”匹配“never”中的“er”,但不匹配“verb”中的“er”。B非字邊界匹配。“erB”匹配“verb”中的“er”,但不匹配“never”中的“er”。cx匹配x指示的控制字符。例如,cM 匹配 Control-M 或回車符。x的值必須在 A-Z 或 a-z 之間。如果不是這樣,則假定 c 就是“c”

9、字符本身。d數字字符匹配。等效于 0-9。D非數字字符匹配。等效于 0-9。f換頁符匹配。等效于 x0c 和 cL。n換行符匹配。等效于 x0a 和 cJ。r匹配一個回車符。等效于 x0d 和 cM。s匹配任何空白字符,包括空格、制表符、換頁符等。與 fnrtv 等效。S匹配任何非空白字符。與 fnrtv 等效。t制表符匹配。與 x09 和 cI 等效。v垂直制表符匹配。與 x0b 和 cK 等效。w匹配任何字類字符,包括下劃線。與“A-Za-z0-9_”等效。W與任何非單詞字符匹配。與“A-Za-z0-9_”等效。xn匹配n,此處的n是一個十六進制轉義碼。十六進制轉義碼必須正好是兩位數長。例

10、如,“x41”匹配“A”。“x041”與“x04”&“1”等效。允許在正則表達式中使用 ASCII 代碼。num匹配num,此處的num是一個正整數。到捕獲匹配的反向引用。例如,“(.)1”匹配兩個連續的相同字符。n標識一個八進制轉義碼或反向引用。如果 n前面至少有n個捕獲子表達式,那么n是反向引用。否則,如果n是八進制數 (0-7),那么n是八進制轉義碼。nm標識一個八進制轉義碼或反向引用。如果 nm前面至少有nm個捕獲子表達式,那么nm是反向引用。如果 nm前面至少有n個捕獲,則n是反向引用,后面跟有字符m。如果兩種前面的情況都不存在,則 nm匹配八進制值nm,其中n和m是八進制數字 (0

11、-7)。nml當n是八進制數 (0-3),m和l是八進制數 (0-7) 時,匹配八進制轉義碼nml。un匹配n,其中n是以四位十六進制數表示的 Unicode 字符。例如,u00A9 匹配版權符號 ()。三、生成正則表達式正則表達式的結構與算術表達式的結構類似。即,各種元字符和運算符可以將小的表達式組合起來,創建大的表達式。分隔符通過在一對分隔符之間放置表達式模式的各種組件,就可以構建正則表達式。對于 JScript,分隔符是正斜杠 (/) 字符。例如:/expression/在上面的示例中,正則表達式模式 (expression) 存儲在RegExp對象的Pattern屬性中。正則表達式的組

12、件可以是單個字符、字符集、字符的范圍、在幾個字符之間選擇或者所有這些組件的任何組合。 四、優先級順序正則表達式從左到右進行計算,并遵循優先級順序,這與算術表達式非常類似。運算符下表從最高到最低說明了各種正則表達式運算符的優先級順序:運算符說明轉義符(), (?:), (?=), 括號和中括號*, +, ?, n, n, n,m限定符, $, 任何元字符、任何字符定位點和序列|替換字符具有高于替換運算符的優先級,使得“m|food”匹配“m”或“food”。若要匹配“mood”或“food”,請使用括號創建子表達式,從而產生“(m|f)ood”。五、JScript 中的特殊字符許多元字符要求在試

13、圖匹配它們時特別對待。若要匹配這些特殊字符,必須首先使字符“轉義”,即,將反斜杠字符 () 放在它們前面。下表列出了特殊字符以及它們的含義:特殊字符表特殊字符注釋$匹配輸入字符串結尾的位置。如果設置了RegExp對象的Multiline屬性,那么 $ 還匹配 n 或 r 前面的位置。若要匹配 $ 字符本身,請使用 $。( )標記子表達式的開始和結束。可以捕獲子表達式以供以后使用。若要匹配這兩個字符,請使用 ( 和 )。*零次或多次匹配前面的字符或子表達式。若要匹配 * 字符,請使用 *。+一次或多次匹配前面的字符或子表達式。若要匹配 + 字符,請使用 +。.匹配除換行符 n 之外的任何單個字符

14、。若要匹配 .,請使用 。 標記中括號表達式的開始。若要匹配這些字符,請使用 和 。?零次或一次匹配前面的字符或子表達式,或指示“非貪心”限定符。若要匹配 ? 字符,請使用 ?。將下一字符標記為特殊字符、文本、反向引用或八進制轉義符。例如,字符 n 匹配字符 n。n 匹配換行符。序列 匹配 ,序列 ( 匹配 (。/表示文本正則表達式的開始或結束。若要匹配 / 字符,請使用 /。匹配輸入字符串開始處的位置,但在中括號表達式中使用的情況除外,在那種情況下它對字符集求反。若要匹配 字符本身,請使用 。 標記限定符表達式的開始。若要匹配這些字符,請使用 和 。|指出在兩個項之間進行選擇。要匹配 |,請

15、使用 |。六、不可打印字符非打印字符也可以是正則表達式的組成部分。下表列出了表示非打印字符的轉義序列:轉義序列字符含義cx匹配x指示的控制字符。例如,cM 匹配 Control-M 或回車符。x的值必須在 A-Z 或 a-z 之間。如果不是這樣,則假定 c 就是“c”字符本身。f換頁符匹配。等效于 x0c 和 cL。n換行符匹配。等效于 x0a 和 cJ。r匹配一個回車符。等效于 x0d 和 cM。s匹配任何空白字符,包括空格、制表符、換頁符等。與 fnrtv 等效。S匹配任何非空白字符。與 fnrtv 等效。t制表符匹配。與 x09 和 cI 等效。v垂直制表符匹配。與 x0b 和 cK 等

16、效。七、字符匹配句點 (.) 匹配字符串中的各種打印或非打印字符,只有一個字符例外。這個例外就是換行符 (n)。下面的正則表達式匹配 aac、abc、acc、adc 等等,以及 a1c、a2c、a-c 和 a#c:/a.c/若要匹配包含文件名的字符串,而句點 (.) 是輸入字符串的組成部分,請在正則表達式中的句點前面加反斜扛 () 字符。舉例來說明,下面的正則表達式匹配 filename.ext:/filename.ext/這些表達式只讓您匹配“任何”單個字符。可能需要匹配列表中的特定字符組。例如,可能需要查找用數字表示的章節標題(Chapter 1、Chapter 2 等等)。中括號表達式若

17、要創建匹配字符組的一個列表,請在方括號( 和 )內放置一個或更多單個字符。當字符括在中括號內時,該列表稱為“中括號表達式”。與在任何別的位置一樣,普通字符在中括號內表示其本身,即,它在輸入文本中匹配一次其本身。大多數特殊字符在中括號表達式內出現時失去它們的意義。不過也有一些例外,如: 如果 字符不是第一項,它結束一個列表。若要匹配列表中的 字符,請將它放在第一位,緊跟在開始 后面。 字符繼續作為轉義符。若要匹配 字符,請使用 。括在中括號表達式中的字符只匹配處于正則表達式中該位置的單個字符。以下正則表達式匹配 Chapter 1、Chapter 2、Chapter 3、Chapter 4 和

18、Chapter 5:/Chapter 12345/請注意,單詞Chapter和后面的空格的位置相對于中括號內的字符是固定的。中括號表達式指定的只是匹配緊跟在單詞Chapter和空格后面的單個字符位置的字符集。這是第九個字符位置。若要使用范圍代替字符本身來表示匹配字符組,請使用連字符 (-) 將范圍中的開始字符和結束字符分開。單個字符的字符值確定范圍內的相對順序。下面的正則表達式包含范圍表達式,該范圍表達式等效于上面顯示的中括號中的列表。/Chapter 1-5/當以這種方式指定范圍時,開始值和結束值兩者都包括在范圍內。注意,還有一點很重要,按 Unicode 排序順序,開始值必須在結束值的前面

19、。若要在中括號表達式中包括連字符,請采用下列方法之一: 用反斜扛將它轉義: - 將連字符放在中括號列表的開始或結尾。下面的表達式匹配所有小寫字母和連字符: -a-z a-z- 創建一個范圍,在該范圍中,開始字符值小于連字符,而結束字符值等于或大于連字符。下面的兩個正則表達式都滿足這一要求: !- !-若要查找不在列表或范圍內的所有字符,請將插入符號 () 放在列表的開頭。如果插入字符出現在列表中的其他任何位置,則它匹配其本身。下面的正則表達式匹配編號大于 5 的章節標題:/Chapter 12345/在上面的示例中,表達式在第九個位置匹配 1、2、3、4 或 5 之外的任何數字字符。這樣,例如

20、,Chapter 7 就是一個匹配項,Chapter 9 也是一個匹配項。上面的表達式可以使用連字符 (-) 來表示:/Chapter 1-5/中括號表達式的典型用途是指定任何大寫或小寫字母或任何數字的匹配。下面的表達式指定這樣的匹配:/A-Za-z0-9/八、JScript 中的限定符如果您不能指定構成匹配的字符的數量,那么正則表達式支持限定符的概念。這些限定符使您能夠指定,為使匹配為真,正則表達式的某個給定組件必須出現多少次。限定符含義字符說明*零次或多次匹配前面的字符或子表達式。例如,zo* 匹配 z 和 zoo。* 等效于 0,。+一次或多次匹配前面的字符或子表達式。例如,zo+ 匹配 zo 和 zoo,但不匹配 z。+ 等效于 1,。?零次或一次匹配前面的字符或子表達式。例如,do(es)? 匹配 do 或 does 中的 do。? 等效于 0,1。nn是非負整數。正好匹配n次。例如,o2 不匹配 Bob 中的 o,但匹配 food 中的兩個 o。n,n是非負整數。至少匹配n次。例如,o2, 不匹配 Bob 中的 o,而匹配 foooood 中的所有 o。o1, 等效于 o+。o0, 等效于 o*。n,mm和n是非負整數,其中n=m。匹配至少n次,至多m次。例如,o1,3 匹配 fooooood 中的頭三個 o。o0,1 等效于

溫馨提示

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

評論

0/150

提交評論