使用小括號指定乙個子表示式後,匹配這個子表示式的文字(也就是此分組捕獲的內容)可以在表示式或其它程式中作進一步的處理。
捕獲組
語法:
字元
描述
示例
(pattern)
匹配pattern並捕獲結果,自動設定組號。
(abc)+d
匹配abcd或者abcabcd
(?pattern)
或(?'name'pattern)
匹配pattern並捕獲結果,設定name為組名。
\num
對捕獲組的反向引用。其中 num 是乙個正整數。
(\w)(\w)\2\1
匹配abba
\k或\k'name '
對命名捕獲組的反向引用。其中 name 是捕獲組名。
(?\w)abc\k
匹配xabcx
使用小括號指定乙個子表示式後,匹配這個子表示式的文字(也就是此分組捕獲的內容)可以在表示式或其它程式中作進一步的處理。預設情況下,每個捕獲組會自動擁有乙個組號,規則是:從左向右,以分組的左括號為標誌,第乙個出現的分組的組號為1,第二個為2,以此類推。
例如:
(\d)-(\d-(\d))
1 1 2 3 32
以下是用程式處理捕獲組的示例,對乙個url位址進行解析,並顯示所有捕獲組。
可以看到按順序設定的捕獲組號。
regex.match方法
複製**
**如下:
也可以自己指定子表示式的組名。這樣在表示式或程式中可以直接引用組名,當然也可以繼續使用組號。但如果正規表示式中同時存在普通捕獲組和命名捕獲組,那麼捕獲組的編號就要特別注意,編號的規則是先對普通捕獲組進行編號,再對命名捕獲組進行編號。
例如:
(\d)-(?\d-(\d))
1 1 3 2 23
下面在程式中處理命名捕獲組,顯示混合規則生成的組號,並利用捕獲組的內容對源字串進行替換。
可以看到先對普通捕獲組進行編號,再對命名捕獲組編號。
regex.replace方法
複製**
**如下:
using system.text.regularexpressions;
namespace wuhong.test
: ", i, m.groups[i]));
} }
//替換字串
//「$組號」引用捕獲組的內容。
//需要特別注意的是「$組號」後不能跟數字形式的字串,如果出現此情況,需要使用命名捕獲組,引用格式「$」
非捕獲組
語法:字元
描述
示例
(?: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
{ class program
{ static void main(string args)
{ //目標字串
string source = "有6組數字:010001,100,21000,310000,4100011,510002,把郵編挑出來。";
//正則式
string regex = @"(?原文**:
正規表示式 非捕獲分組
目前為止,總共介紹了括號的三種用途 分組,將相關的語速歸攏到一起,構成單個元素 多選結構,規定可能出現的多個子表達示 引用分組,將子表示式匹配的文字儲存起來,供之後引用。這三種用途並不是彼此獨立的,而是互相重疊的 單純的分組可以視為 只包含乙個多選分支的多選結構 整個多選結構也會被視為單個元素,可以...
正規表示式 分組與捕獲
之前使用正規表示式的時候大多數狀況下只是用用匹配表示式,為什麼說是匹配表示式呢,因為其實替換文字也可以使用表示式,我稱之為替換表示式。因為通常使用正規表示式的大多會是以下情況,比如把一段文字中的a字串更改為b字串 待匹配文字 abcdabcd 匹配表示式 b 替換文字 e 替換結果 aecdaecd...
正規表示式 分組與捕獲
之前使用正規表示式的時候大多數狀況下只是用用匹配表示式,為什麼說是匹配表示式呢,因為其實替換文字也可以使用表示式,我稱之為替換表示式。因為通常使用正規表示式的大多會是以下情況,比如把一段文字中的a字串更改為b字串 待匹配文字 abcdabcd 匹配表示式 b 替換文字 e 替換結果 aecdaecd...