亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > ASP > 正文

微軟的正則表達式教程(五):選擇/編組和后向

2024-05-04 11:07:36
字體:
來源:轉載
供稿:網友

選擇與編組

選擇允許使用 '|' 字符來在兩個或多個候選項中進行選擇。通過擴展章節標題的正則表達式,可以將其擴充為不僅僅適用于章節標題的表達式。不過,這可沒有想象的那么直接。在使用選擇時,將匹配'|' 字符每邊最可能的表達式。你可能認為下面的 JScript 和 VBScript 表達式將匹配位于一行的開始和結束位置且后跟一個或兩個數字的 'Chapter' 或 'Section':

/^Chapter|Section [1-9][0-9]{0,1}$/ "^Chapter|Section [1-9][0-9]{0,1}___FCKpd___0quot;

不幸的是,真正的情況是上面所示的正則表達式要么匹配位于一行開始處的單詞 'Chapter',要么匹配一行結束處的后跟任何數字的 'Section'。如果輸入字符串為 'Chapter 22',上面的表達式將只匹配單詞 'Chapter'。如果輸入字符串為 'Section 22',則該表達式將匹配 'Section 22'。但這種結果不是我們此處的目的,因此必須有一種辦法來使正則表達式對于所要做的更易于響應,而且確實也有這種方法。

可以使用圓括號來限制選擇的范圍,也就是說明確該選擇只適用于這兩個單詞 'Chapter' 和 'Section'。不過,圓括號同樣也是難處理的,因為它們也用來創建子表達式,有些內容將在后面關于子表達式的部分介紹。通過采用上面所示的正則表達式并在適當位置添加圓括號,就可以使該正則表達式既可以匹配 'Chapter 1',也可以匹配 'Section 3'。

下面的正則表達式使用圓括號將 'Chapter' 和 'Section' 組成一組,所以該表達式才能正確工作。對 JScript 為:

/^(Chapter|Section) [1-9][0-9]{0,1}$/

對 VBScript 為:

"^(Chapter|Section) [1-9][0-9]{0,1}___FCKpd___2quot;

這些表達式工作正確,只是產生了一個有趣的副產品。在 'Chapter|Section' 兩邊放置圓括號建立了適當的編組,但也導致兩個待匹配單詞之一都被捕獲供今后使用。由于在上面所示的表達式中只有一組圓括號,因此只能有一個捕獲的 submatch。可以使用 VBScript 的Submatches 集合或者JScript 中RegExp 對象的 $1-$9 屬性來引用這個子匹配。

有時捕獲一個子匹配是所希望的,有時則是不希望的。在說明所示的示例中,真正想做的就是使用圓括號對單詞 'Chapter' 或 'Section' 之間的選擇編組。并不希望在后面再引用該匹配。實際上,除非真的是需要捕獲子匹配,否則請不要使用。由于不需要花時間和內存來存儲那些子匹配,這種正則表達式的效率將更高。

可以在正則表達式模式圓括號內部的前面使用 '?:'來防止存儲該匹配供今后使用。對上面所示正則表達式的下述修改提供了免除子匹配存儲的相同功能。對 JScript:

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

對 VBScript:

"^(?:Chapter|Section) [1-9][0-9]{0,1}___FCKpd___4quot;

除了 '?:' 元字符,還有兩個非捕獲元字符用于稱之為預查的匹配。一個為正向預查,用 ?= 表示, 在任何開始匹配圓括號內的正則表達式模式的位置來匹配搜索字符串。一個為負向預查,用 '?!' 表示,在任何開始不匹配該正則表達式模式的位置來匹配搜索字符串。

例如,假定有一個包含引用有 Windows 3.1、Windows 95、Windows 98 以及 Windows NT 的文檔。進一步假設需要更新該文檔,方法是查找所有對 Windows 95、Windows 98 以及 Windows NT 的引用,并將這些引用更改為 Windows 2000??梢允褂孟旅娴?JScript 正則表達式,這是一個正向預查,來匹配 Windows 95、Windows 98 以及 Windows NT:

/Windows(?=95 |98 |NT )/

在 VBScript 要進行同樣的匹配可以使用下述表達式:"Windows(?=95 |98 |NT )"

找到一個匹配后,緊接匹配到的文字(而不包括預查中使用的字符)就開始對下一次匹配的搜索。例如,如果上面所示的表達式匹配到 'Windows 98',則將從 'Windows' 而不是 '98' 之后繼續查找。

后向引用

正則表達式一個最重要的特性就是將匹配成功的模式的某部分進行存儲供以后使用這一能力。請回想一下,對一個正則表達式模式或部分模式兩邊添加圓括號將導致這部分表達式存儲到一個臨時緩沖區中??梢允褂梅遣东@元字符 '?:', '?=', or '?!' 來忽略對這部分正則表達式的保存。

所捕獲的每個子匹配都按照在正則表達式模式中從左至右所遇到的內容存儲。存儲子匹配的緩沖區編號從 1 開始,連續編號直至最大 99 個子表達式。每個緩沖區都可以使用 '/n' 訪問,其中 n 為一個標識特定緩沖區的一位或兩位十進制數。

后向引用一個最簡單,最有用的應用是提供了確定文字中連續出現兩個相同單詞的位置的能力。請看下面的句子:

Is is the cost of of gasoline going up up?

根據所寫內容,上面的句子明顯存在單詞多次重復的問題。如果能有一種方法無需查找每個單詞的重復現象就能修改該句子就好了。下面的 JScript 正則表達式使用一個子表達式就可以實現這一功能。

//b([a-z]+) /1/b/gi

等價的 VBScript 表達式為:

"/b([a-z]+) /1/b"

在這個示例中,子表達式就是圓括號之間的每一項。所捕獲的表達式包括一個或多個字母字符,即由'[a-z]+' 所指定的。該正則表達式的第二部分是對前面所捕獲的子匹配的引用,也就是由附加表達式所匹配的第二次出現的單詞。'/1'用來指定第一個子匹配。單詞邊界元字符確保只檢測單獨的單詞。如果不這樣,則諸如 "is issued" 或 "this is" 這樣的短語都會被該表達式不正確地識別。

在 JScript 表達式中,正則表達式后面的全局標志 ('g') 表示該表達式將用來在輸入字符串中查找盡可能多的匹配。大小寫敏感性由表達式結束處的大小寫敏感性標記 ('i') 指定。多行標記指定可能出現在換行符的兩端的潛在匹配。對 VBScript 而言,在表達式中不能設置各種標記,但必須使用 RegExp 對象的屬性來顯式設置。

使用上面所示的正則表達式,下面的 JScript 代碼可以使用子匹配信息,在一個文字字符串中將連續出現兩次的相同單詞替換為一個相同的單詞:

var ss = "Is is the cost of of gasoline going up up?./n"; var re = //b([a-z]+) /1/b/gim; //創建正則表達式樣式. var rv = ss.replace(re,"$1"); //用一個單詞替代兩個單詞.

最接近的等價  VBScript 代碼如下:

Dim ss, re, rv ss = "Is is the cost of of gasoline going up up?." & vbNewLine Set re = New RegExp re.Pattern = "/b([a-z]+) /1/b" re.Global = True re.IgnoreCase = True re.MultiLine = True rv = re.Replace(ss,"$1")

請注意在 VBScript 代碼中,全局、大小寫敏感性以及多行標記都是使用 RegExp 對象的適當屬性來設置的。

replace 方法中使用 $1 來引用所保存的第一個子匹配。如果有多個子匹配,則可以用 $2, $3 等繼續引用。

后向引用的另一個用途是將一個通用資源指示符 (URI) 分解為組件部分。假定希望將下述的URI 分解為協議 (ftp, http, etc),域名地址以及頁面/路徑:

http://msdn.microsoft.com:80/scripting/default.htm

下面的正則表達式可以提供這個功能。對 JScript,為:

/(/w+):////([^/:]+)(:/d*)?([^# ]*)/

對 VBScript 為:

"(/w+):////([^/:]+)(:/d*)?([^# ]*)"

第一個附加子表達式是用來捕獲該 web 地址的協議部分。該子表達式匹配位于一個冒號和兩個正斜杠之前的任何單詞。第二個附加子表達式捕獲該地址的域名地址。該子表達式匹配不包括 '^'、 '/' 或 ':' 字符的任何字符序列。第三個附加子表達式捕獲網站端口號碼,如果指定了該端口號。該子表達式匹配后跟一個冒號的零或多個數字。最后,第四個附加子表達式捕獲由該 web 地址指定的路徑以及/或者頁面信息。該子表達式匹配一個和多個除'#' 或空格之外的字符。

將該正則表達式應用于上面所示的 URI 后,子匹配包含下述內容:

RegExp.$1 包含 "http"

RegExp.$2 包含 "msdn.microsoft.com"

RegExp.$3 包含 ":80"

RegExp.$4 包含 "/scripting/default.htm"

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91视频88av| 欧美激情综合色综合啪啪五月| 国内揄拍国内精品| www.久久色.com| 亚洲成人av片| 国产午夜精品麻豆| 欧美高清视频在线播放| 国产+成+人+亚洲欧洲| 欧美野外wwwxxx| 欧美插天视频在线播放| 久久久久久久影院| 国产丝袜一区视频在线观看| 91久久久久久久久久久| 亚洲精品欧美日韩专区| 国产精品v片在线观看不卡| 日韩电影免费在线观看中文字幕| 午夜美女久久久久爽久久| 国产精品美腿一区在线看| 欧美性猛交xxxx免费看久久久| 在线观看日韩欧美| 国产精品久久久久久久久免费| 北条麻妃一区二区在线观看| 韩剧1988在线观看免费完整版| 国产精品美女无圣光视频| 日韩毛片在线看| 欧美日韩在线影院| 国产精品视频色| 欧美日韩亚洲一区二| 国产精品一香蕉国产线看观看| 91久久精品国产91久久| 亚洲欧美日韩一区在线| 欧美日韩国产123| 欧洲s码亚洲m码精品一区| 91九色视频导航| 久久精品成人一区二区三区| 久久97精品久久久久久久不卡| 国产精品美女视频网站| 午夜精品久久久久久久99黑人| 欧美极品少妇xxxxx| 亚洲国产精品va| 久久九九国产精品怡红院| 国产va免费精品高清在线| 久久人人爽人人爽人人片av高请| yw.139尤物在线精品视频| 日韩电影在线观看免费| 国产精品视频在线播放| 欧美国产日韩精品| 日韩国产中文字幕| 搡老女人一区二区三区视频tv| 国产精品自拍偷拍| 成人免费福利在线| 国产精品久久久久久久午夜| 欧美激情在线观看视频| 久久久久久久久久久人体| 91精品免费看| 久久久久日韩精品久久久男男| 国产精品美女久久久久av超清| 国语自产精品视频在线看一大j8| 成人久久久久久| 久久久国产精品免费| 91精品国产91久久久久久不卡| 欧美一区二区三区精品电影| 日本人成精品视频在线| 欧美在线观看网址综合| 欧美日产国产成人免费图片| 国产精品国产亚洲伊人久久| 欧美精品国产精品日韩精品| 7777精品视频| 欧美高清videos高潮hd| 日韩在线免费av| 人人澡人人澡人人看欧美| 色无极亚洲影院| www.亚洲一区| 欧美日韩亚洲视频| 日韩有码在线观看| 91国产美女在线观看| 欧美激情网站在线观看| 5566日本婷婷色中文字幕97| 久久久久久亚洲精品不卡| 国产精品免费网站| 5566成人精品视频免费| 91视频九色网站| 欧美国产精品日韩| 麻豆乱码国产一区二区三区| 久久精品成人一区二区三区| 亚州精品天堂中文字幕| 国产精品三级美女白浆呻吟| 亚洲精品美女久久久| 黑人巨大精品欧美一区免费视频| 91精品视频免费观看| 久久精品夜夜夜夜夜久久| 亚洲一区久久久| 国产丝袜一区二区三区免费视频| 国产视频自拍一区| 欧美网站在线观看| 欧美日韩激情美女| 亚洲人成网站999久久久综合| 国内精品视频一区| 欧美不卡视频一区发布| 日韩电影在线观看中文字幕| 色综合久久中文字幕综合网小说| 国产精彩精品视频| 欧美一级片一区| 亚洲自拍偷拍第一页| 日韩中文在线观看| 国产原创欧美精品| 乱亲女秽乱长久久久| 狠狠躁天天躁日日躁欧美| 欧美理论在线观看| 91在线观看免费观看| 日韩精品在线免费观看视频| 中文字幕无线精品亚洲乱码一区| 国产91精品久久久久久| 国产精品综合不卡av| 国产成人精品久久| 日本19禁啪啪免费观看www| 国产日韩中文字幕在线| 国产拍精品一二三| 欧美亚洲激情视频| 中文国产亚洲喷潮| 日本中文字幕久久看| 日韩一级裸体免费视频| 国产在线精品一区免费香蕉| 欧美日韩国产成人高清视频| 最近更新的2019中文字幕| 国产成人自拍视频在线观看| 亚洲娇小xxxx欧美娇小| 亚洲综合在线小说| 欧美日韩不卡合集视频| 成人免费视频97| 色99之美女主播在线视频| 成人情趣片在线观看免费| 一区二区成人av| 日本老师69xxx| 欧美成人精品xxx| 亚洲精品成人网| 亚洲大胆人体在线| 日本久久91av| 国产精品国产福利国产秒拍| 欧美另类xxx| 成人国产精品日本在线| 国产精品夫妻激情| 国产精品∨欧美精品v日韩精品| 精品国模在线视频| 日韩av有码在线| 日韩中文视频免费在线观看| 最近中文字幕mv在线一区二区三区四区| 欧洲日韩成人av| 精品二区三区线观看| 欧美精品免费在线观看| 久久99国产精品自在自在app| 精品福利视频导航| 国产精品日韩专区| 国产亚洲精品美女| 欧美极品美女视频网站在线观看免费| 国产大片精品免费永久看nba| 91在线直播亚洲| 日韩欧美在线视频免费观看| 精品一区二区三区四区在线| 久久久久久久久久国产| 欧美性视频在线| 高清欧美电影在线| 日韩在线观看免费高清| 91免费在线视频|