正規表示式中的向後引用

2021-03-31 12:36:01 字數 2134 閱讀 6906

正規表示式乙個最重要的特性就是將匹配成功的模式的某部分進行儲存供以後使用這一能力。請回想一下,對乙個正規表示式模式或部分模式兩邊新增圓括號將導致這部分表示式儲存到乙個臨時緩衝區中。可以使用非捕獲元字元 '?:', '?=', 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等繼續引用。

http://msdn.microsoft.***:80/scripting/default.htm
下面的正規表示式可以提供這個功能。對 jscript,為:

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

"(/w+):([^/:]+)(:/d*)?([^# ]*)"
第乙個附加子表示式是用來捕獲該 web 位址的協議部分。該子表示式匹配位於乙個冒號和兩個正斜槓之前的任何單詞。第二個附加子表示式捕獲該位址的網域名稱位址。該子表示式匹配不包括 '^'、 '/' 或 ':' 字元的任何字串行。第三個附加子表示式捕獲**埠號碼,如果指定了該埠號。該子表示式匹配後跟乙個冒號的零或多個數字。最後,第四個附加子表示式捕獲由該 web 位址指定的路徑以及/或者頁面資訊。該子表示式匹配乙個和多個除'#' 或空格之外的字元。

將該正規表示式應用於上面所示的 uri 後,子匹配包含下述內容:

正規表示式中的反向引用

反向引用 nnn 對指定分組已捕獲的字串進行引用,對當前匹配的字串,引用指定分組捕獲到的字串,主要用於文字的替換。說明deelx 支援的反向引用格式 反向引用 說明 nnn 對指定編號的分組進行反向引用 g對指定名字的命名分組進行反向引用 k k name 另外,如果被引用的捕獲組 括號對 未進行捕...

正規表示式中的反向引用

反向引用 nnn 對指定分組已捕獲的字串進行引用,對當前匹配的字串,引用指定分組捕獲到的字串,主要用於文字的替換。說明deelx 支援的反向引用格式 反向引用 說明 nnn 對指定編號的分組進行反向引用 g對指定名字的命名分組進行反向引用 k k name 另外,如果被引用的捕獲組 括號對 未進行捕...

正規表示式中的反向引用

1.反向引用需要使用到分組,分組就是使用 括起來的部分為乙個整體,在進行分組匹配時的原則是 由外向內,由左向右 2.反向引用如 1,2等 1 表示的是引用第一次匹配到的 括起來的部分 2 表示的是引用第二次匹配到的 括起來的部分 1 例 string regex d 1 首先這裡是匹配兩位,d一位,...