国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

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

字符 

描述

示例

(pattern)

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

 (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 是捕獲組名。

(?\w)abc\k

匹配xabcx

使用小括號(hào)指定一個(gè)子表達(dá)式后,匹配這個(gè)子表達(dá)式的文本(也就是此分組捕獲的內(nèi)容)可以在表達(dá)式或其它程序中作進(jìn)一步的處理。默認(rèn)情況下,每個(gè)捕獲組會(huì)自動(dòng)擁有一個(gè)組號(hào),規(guī)則是:從左向右,以分組的左括號(hào)為標(biāo)志,第一個(gè)出現(xiàn)的分組的組號(hào)為1,第二個(gè)為2,以此類推。
例如:
(\d{4})-(\d{2}-(\d{2}))
1 1 2 3 32
以下是用程序處理捕獲組的示例,對一個(gè)Url地址進(jìn)行解析,并顯示所有捕獲組。
可以看到按順序設(shè)置的捕獲組號(hào)。
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è)字符串值
//按“組號(hào) : 捕獲內(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āng)然也可以繼續(xù)使用組號(hào)。但如果正則表達(dá)式中同時(shí)存在普通捕獲組和命名捕獲組,那么捕獲組的編號(hào)就要特別注意,編號(hào)的規(guī)則是先對普通捕獲組進(jìn)行編號(hào),再對命名捕獲組進(jìn)行編號(hào)。
例如:
(\d{4})-(?\d{2}-(\d{2}))
1 1 3 2 23

下面在程序中處理命名捕獲組,顯示混合規(guī)則生成的組號(hào),并利用捕獲組的內(nèi)容對源字符串進(jìn)行替換。
可以看到先對普通捕獲組進(jìn)行編號(hào),再對命名捕獲組編號(hào)。
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+):\/\/(?[^/:]+)(?:\d+)?([^# :]*)';
Regex regUrl = new Regex(regex);
//匹配正則表達(dá)式
Match m = regUrl.Match(source);
Console.WriteLine(m.Success);
if (m.Success)
{
//捕獲組存放在Match.Groups集合中,索引值從1開始,索引0處為匹配的整個(gè)字符串值
//按“組號(hào) : 捕獲內(nèi)容”的格式顯示
for (int i = 0; i < m.groups.count;="" i++)="">
{
Console.WriteLine(string.Format('{0} : {1}', i, m.Groups[i]));
}
}
//替換字符串
//“$組號(hào)”引用捕獲組的內(nèi)容。
//需要特別注意的是“$組號(hào)”后不能跟數(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();
}
}
}


非捕獲組
語法:

剛懷上孕怎么打
微粒貸
懷不了孕做哪些檢查
感情挽回
編程學(xué)習(xí)入門
意外早孕
網(wǎng)絡(luò)編程是什么
婚姻介紹

字符 

描述

示例

(?: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 (?<>

匹配 ' Office2000' 中的 '2000'

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

(?pattern)

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

'2000 (?

匹配 ' Windows2000' 中的 '2000'

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


非捕獲組只匹配結(jié)果,但不捕獲結(jié)果,也不會(huì)分配組號(hào),當(dāng)然也不能在表達(dá)式和程序中做進(jìn)一步處理。
首先(?:pattern)與(pattern)不同之處只是在于不捕獲結(jié)果。
接下來的四個(gè)非捕獲組用于匹配pattern(或者不匹配pattern)位置之前(或之后)的內(nèi)容。匹配的結(jié)果不包括pattern。
例如:
(?<><(\w+)>).*(?=<\ 1="">)匹配不包含屬性的簡單HTML標(biāo)簽內(nèi)的內(nèi)容。如:
hello
之中的hello,匹配結(jié)果不包括前綴
和后綴
。
下面是程序中非捕獲組的示例,用來提取郵編。
可以看到反向回查和反向預(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 = @'(?Regex regUrl = new Regex(regex);
//獲取所有匹配
MatchCollection mList = regUrl.Matches(source);
for (int j = 0; j < mlist.count;="" j++)="">
{
//顯示每個(gè)分組,可以看到每個(gè)分組都只有組號(hào)為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();
}
}
}


注釋
語法:

字符

描述

示例

(?#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è)不解釋了。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Regex 類詳解
【C#】正則進(jìn)階
深入正則表達(dá)式API
Pattern/Matcher
正則表達(dá)式對象和RegExp對象
Java 正則表達(dá)式
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服