麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Regex > 正文

正則表達(dá)式之捕獲組/非捕獲組介紹

2020-03-16 21:11:06
字體:
供稿:網(wǎng)友
使用小括號指定一個(gè)子表達(dá)式后,匹配這個(gè)子表達(dá)式的文本(也就是此分組捕獲的內(nèi)容)可以在表達(dá)式或其它程序中作進(jìn)一步的處理。
 
 
捕獲組 
語法: 

字符 

描述

示例

(pattern)

匹配pattern并捕獲結(jié)果,自動(dòng)設(shè)置組號。

 (abc)+d

匹配abcd或者abcabcd

(?<name>pattern)

(?'name'pattern)

匹配pattern并捕獲結(jié)果,設(shè)置name為組名。

 

/num

對捕獲組的反向引用。其中 num 是一個(gè)正整數(shù)。

(/w)(/w)/2/1

匹配abba

/k< name >

/k' name '

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

(?<group>/w)abc/k<group>

匹配xabcx

使用小括號指定一個(gè)子表達(dá)式后,匹配這個(gè)子表達(dá)式的文本(也就是此分組捕獲的內(nèi)容)可以在表達(dá)式或其它程序中作進(jìn)一步的處理。默認(rèn)情況下,每個(gè)捕獲組會(huì)自動(dòng)擁有一個(gè)組號,規(guī)則是:從左向右,以分組的左括號為標(biāo)志,第一個(gè)出現(xiàn)的分組的組號為1,第二個(gè)為2,以此類推。 
例如: 
(/d{4})-(/d{2}-(/d{2})) 
1 1 2 3 32 
以下是用程序處理捕獲組的示例,對一個(gè)Url地址進(jìn)行解析,并顯示所有捕獲組。 
可以看到按順序設(shè)置的捕獲組號。 
Regex.Match方法 
復(fù)制代碼代碼如下:

using System.Text.RegularExpressions; 
namespace Wuhong.Test 

class Program 

static void Main(string[] args) 

//目標(biāo)字符串 
string source = "http://reg-test-server:8080/download/file1.html# "; 
//正則式 
string regex = @"(/w+):////([^/:]+)(:/d+)?([^# :]*)"; 
Regex regUrl = new Regex(regex); 
//匹配正則表達(dá)式 
Match m = regUrl.Match(source); 
Console.WriteLine(m.Success); 
if (m.Success) 

//捕獲組存放在Match.Groups集合中,索引值從1開始,索引0處為匹配的整個(gè)字符串值 
//按“組號 : 捕獲內(nèi)容”的格式顯示 
for (int i = 0; i < m.Groups.Count; i++) 

Console.WriteLine(string.Format("{0} : {1}", i, m.Groups[i])); 


Console.ReadLine(); 



正則表達(dá)式之捕獲組/非捕獲組介紹

也可以自己指定子表達(dá)式的組名。這樣在表達(dá)式或程序中可以直接引用組名,當(dāng)然也可以繼續(xù)使用組號。但如果正則表達(dá)式中同時(shí)存在普通捕獲組和命名捕獲組,那么捕獲組的編號就要特別注意,編號的規(guī)則是先對普通捕獲組進(jìn)行編號,再對命名捕獲組進(jìn)行編號。 
例如: 
(/d{4})-(?<date>/d{2}-(/d{2})) 
1 1 3 2 23 

下面在程序中處理命名捕獲組,顯示混合規(guī)則生成的組號,并利用捕獲組的內(nèi)容對源字符串進(jìn)行替換。 
可以看到先對普通捕獲組進(jìn)行編號,再對命名捕獲組編號。 
Regex.Replace方法 
復(fù)制代碼代碼如下:

using System.Text.RegularExpressions; 
namespace Wuhong.Test 

class Program 

static void Main(string[] args) 

//目標(biāo)字符串 
string source = "http://reg-test-server:8080/download/file1.html# "; 
//正則式,對其中兩個(gè)分組命名 
string regex = @"(/w+):////(?<server>[^/:]+)(?<port>:/d+)?([^# :]*)"; 
Regex regUrl = new Regex(regex); 
//匹配正則表達(dá)式 
Match m = regUrl.Match(source); 
Console.WriteLine(m.Success); 
if (m.Success) 

//捕獲組存放在Match.Groups集合中,索引值從1開始,索引0處為匹配的整個(gè)字符串值 
//按“組號 : 捕獲內(nèi)容”的格式顯示 
for (int i = 0; i < m.Groups.Count; i++) 

Console.WriteLine(string.Format("{0} : {1}", i, m.Groups[i])); 


//替換字符串 
//“$組號”引用捕獲組的內(nèi)容。 
//需要特別注意的是“$組號”后不能跟數(shù)字形式的字符串,如果出現(xiàn)此情況,需要使用命名捕獲組,引用格式“${組名}” 
string replacement = string.Format("$1://{0}{1}$2", "new-reg-test-server", ""); 
string result = regUrl.Replace(source, replacement); 
Console.WriteLine(result); 
Console.ReadLine(); 



正則表達(dá)式之捕獲組/非捕獲組介紹
非捕獲組 
語法:

字符 

描述

示例

(?:pattern)

匹配pattern,但不捕獲匹配結(jié)果。

'industr(?:y|ies)

匹配'industry'或'industries'。

(?=pattern)

零寬度正向預(yù)查,不捕獲匹配結(jié)果。

'Windows (?=95|98|NT|2000)'

匹配 "Windows2000" 中的 "Windows"

不匹配 "Windows3.1" 中的 "Windows"。

(?!pattern)

零寬度負(fù)向預(yù)查,不捕獲匹配結(jié)果。

'Windows (?!95|98|NT|2000)'

匹配 "Windows3.1" 中的 "Windows"

不匹配 "Windows2000" 中的 "Windows"。

(?<=pattern)

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

'2000 (?<=Office|Word|Excel)'

匹配 " Office2000" 中的 "2000"

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

(?<!pattern)

零寬度負(fù)向回查,不捕獲匹配結(jié)果。

'2000 (?<!Office|Word|Excel)'

匹配 " Windows2000" 中的 "2000"

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


非捕獲組只匹配結(jié)果,但不捕獲結(jié)果,也不會(huì)分配組號,當(dāng)然也不能在表達(dá)式和程序中做進(jìn)一步處理。 
首先(?:pattern)與(pattern)不同之處只是在于不捕獲結(jié)果。 
接下來的四個(gè)非捕獲組用于匹配pattern(或者不匹配pattern)位置之前(或之后)的內(nèi)容。匹配的結(jié)果不包括pattern。 
例如: 
(?<=<(/w+)>).*(?=<///1>)匹配不包含屬性的簡單HTML標(biāo)簽內(nèi)的內(nèi)容。如:<div>hello</div>之中的hello,匹配結(jié)果不包括前綴<div>和后綴</div>。 
下面是程序中非捕獲組的示例,用來提取郵編。 
可以看到反向回查和反向預(yù)查都沒有被捕獲。 
Regex.Matches方法 
復(fù)制代碼代碼如下:

using System.Text.RegularExpressions; 
namespace Wuhong.Test 

class Program 

static void Main(string[] args) 

//目標(biāo)字符串 
string source = "有6組數(shù)字:010001,100,21000,310000,4100011,510002,把郵編挑出來。";
//正則式 
string regex = @"(?<!/d)([1-9]/d{5})(?!/d)"; 
Regex regUrl = new Regex(regex); 
//獲取所有匹配 
MatchCollection mList = regUrl.Matches(source); 
for (int j = 0; j < mList.Count; j++) 

//顯示每個(gè)分組,可以看到每個(gè)分組都只有組號為1的項(xiàng),反向回查和反向預(yù)查沒有被捕獲 
for (int i = 0; i < mList[j].Groups.Count; i++) 

Console.WriteLine(string.Format("{0} : {1} : {2}", j, i, mList[j].Groups[i])); 


Console.ReadLine(); 



正則表達(dá)式之捕獲組/非捕獲組介紹
注釋 
語法: 

字符

描述

示例

(?#comment)

comment是注釋,不對正則表達(dá)式的處理產(chǎn)生任何影響

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

匹配0-255的整數(shù)

這個(gè)不解釋了。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 青青草好吊色 | 91久久国产综合久久91猫猫 | 国产一及毛片 | 成人爱爱电影 | 日韩三级伦理在线观看 | 免费久久精品 | 深夜福利视频免费观看 | 国产精品一区二区在线 | 亚洲午夜久久久精品一区二区三区 | 欧美黄成人免费网站大全 | 色网站免费观看 | 九九热视频在线免费观看 | 成人av一二三区 | 国产xxxxx在线观看 | 免费在线观看成人av | 亚洲视频在线免费看 | 亚洲资源在线 | 亚洲精品一区二区三区免 | 久久久毛片视频 | 成人一区视频 | 日日狠狠久久偷偷四色综合免费 | 国产精品一区在线看 | 中国老女人一级毛片视频 | 日韩视频1| 国产 视频 一区二区 | 久久另类视频 | 免费观看一级黄色片 | www日韩在线观看 | 亚洲成人免费网站 | 牛牛a级毛片在线播放 | 天天色人人爱 | 日韩av在线影院 | 美女黄网站免费观看 | 午夜在线观看视频网站 | 成人午夜免费在线视频 | 在线中文字幕不卡 | 欧美成人免费看 | 毛片视频观看 | xp123精品视频| 久久精品亚洲精品国产欧美kt∨ | 亚洲成人夜色 |