正規表示式之捕獲組 非捕獲組介紹

2022-10-06 18:42:09 字數 3238 閱讀 1441

捕獲組

語法:

字元

描述

示例

(pattern)

匹配pattern並捕獲結果,自動設定組號。

(abc)+d

匹配abcd或者abcabcd

(?pattern)

或(?'name'pattern)

匹配pattern並捕獲結果,設定name為組名。

\num

對捕獲組的反向引用。其中 num 是乙個正整數。

(\w)(\w)\2\1

匹配abba

\k< name >

或\k' name '

對命名捕獲組的反向引用。其中 name 是捕獲組名。

(?\w)abc\k

匹配xabcx

使用小括號指定乙個子表示式後,匹配這個子表示式的文字(也就是此分組捕獲的內容)可以在表示式或其它程式中作進一步的處理。預設情況下,每個捕獲組會自動擁有乙個組號,規則是:從左向右,以分組的左括號為標誌,第乙個出現的分組的組號為1,第二個為2,以此類推。

例如:

(\d)-(\d-(\d))

1 1 2 3 32

以下是用程式處理捕獲組的示例,對乙個url位址進行解析,並顯示所有捕獲組。

可以看到按順序設定的捕獲組號。

regex.match方法

複製** **如下:

using system.text.regularexpressions;

namespace wuhong.test

: ", i, m.groups[i]));程式設計客棧

} }

console.readline();

} } }

也可以自己指定子表示式的組名。這樣在表示式或程式中可以直接引用組名,當然也可以繼續使用組號。但如果正規表示式中同時存在普通捕獲組和命名捕獲組,那麼捕獲組的編號就要特別注意,編號的規則是先對普通捕獲組進行編號,再對命名捕獲組進行編號。

例如:

(\d)-(?\d-(\d))

1 1 3 2 23

下面在程式中處理命名捕獲組,顯示混合規則生成的組號,並利用捕獲組的內容對源字串進行替換。

可以看到先對普通捕獲組進行編號,再對命名捕獲組編號。

regex.replace方法

複製** **如下:

using system.text.regularexpressions;

namespace wuhong.test

: ", i, m.groups[i]));

} }

//替換字串

//「$組號」引用捕獲組的內容。

//需要特別注意的是「$組號」後不能跟數字形式的字串,如果出現此情況,需要使用命名捕獲組,引用格式「$」

string replacement = string.format("$1://$2", "new-reg-test-server", "");

string result = regurl.replace(source, replacement);

console.writeline(result);

console.readline();

} }

} 非捕獲組

語法:字元

描述

示例

(?:pattern)

匹配pattern,但不捕獲匹配結果。

'industr(?:y|ies)

匹配'industry'或'industries'。

(?=pattern)

零寬度正向預查,不捕獲匹配結果。

'windows (?=95|98|nt|2000)'

匹配 "windows2000" 中的 "windows"

不匹配 "windows3.1" 中的 "windows"。

(?!pattern)

零寬度負向預查,不捕獲匹配結果。

'windows (?!95|98|nt|2000)'

匹配 "windows3.1" 中的 "windows"

不匹配 "windows2000" 中的 "windows"。

(?<=pattern)

零寬度正向回查,不捕獲匹配結果。

'2000 (?<=office|word|excel)'

匹配 " office2000" 中的 "2000"

不匹配 "windows2000" 中的 "2000"。

(?pattern)

零寬度負向回查,不捕獲匹配結果。

'2000 (?

匹配 " windows2000" 中的 "2000"

不匹配 " office2000" 中的 "2000"。

非捕獲組只匹配結果,但不捕獲結果,也不會分配組號,當然也不能在表示式和程式中做進一步處理。

首先(?:pattern)與(pattern)不同之處只是在於不捕獲結果。

接下來的四個非捕獲組用於匹配pattern(或者不匹配pattern)位置之前(或之後)的內容。匹配的結果不包括pattern。

例如:

(?<=).*(?=)匹配不包含屬性的簡單html標籤內的內容。如:hello

之中的hello,匹配結果不包括字首和字尾

。 下面是程式中非捕獲組的示例,用來提取郵編。

可以看到反向回查和反向預查都沒有**獲。

regex.matches方法

複製** **如下:

using system.text.regularexpressions;

namespace wuhong.test

: 程式設計客棧 : ", j, i, mlist[j].groups[i]));

} }

console.readline();

} } }

注釋 語法:

字元

描述

示例

(?#comment)

comment是注釋,不對正規表示式的處理產生任何影響

2[0-4]\d(?#200-249)|25[0-5](?#250-255)|1?\d\d?(?#0-199)

匹配0-255的整數

這個不解釋了。

本文標題: 正規表示式之捕獲組/非捕獲組介紹

本文位址: /wangluo/re/83477.html

正規表示式之捕獲組 非捕獲組

語法 字元 描述 示例 pattern 匹配pattern並捕獲結果,自動設定組號。abc d 匹配abcd或者abcabcd pattern 或 name pattern 匹配pattern並捕獲結果,設定name為組名。num 對捕獲組的反向引用。其中 num 是乙個正整數。w w 2 1 匹配...

PHP之正規表示式捕獲組與非捕獲組(詳解)

在專案開發過程中正則表示經常會用到,可以說會正規表示式是每個程式設計師最基本的要求,初學者在剛接觸正規表示式都感到很吃力。最近看到一位朋友的部落格寫的 php正規表示式 獲益頗多,在章節對萬用字元以及捕獲資料非常感興趣。這兩章節剛好也涉及到了正規表示式的捕獲組和非捕獲組的內容,以此來分析這方面的內容...

mysql 正則匹配 捕獲組 正規表示式 捕獲組

大綱 語法實戰 反向引用 替換 一 語法 捕獲組 匹配子表示式內容,匹配結果以編號或顯示命名的方式存在記憶體,可供正則本身,也可供替換使用。語法 數字編號 pattern 匹配結果儲存為數字。顯示命名 pattern 匹配結果儲存到變數name中。非捕獲 pattern 標識不需要儲存的組。二 實戰...