最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2011年08月16日 01:03:40   作者:  
使用小括號指定一個子表達(dá)式后,匹配這個子表達(dá)式的文本(也就是此分組捕獲的內(nèi)容)可以在表達(dá)式或其它程序中作進(jìn)一步的處理。
捕獲組
語法:

字符 

描述

示例

(pattern)

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

 (abc)+d

匹配abcd或者abcabcd

(?<name>pattern)

(?'name'pattern)

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

 

\num

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

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

匹配abba

\k< name >

\k' name '

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

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

匹配xabcx

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


非捕獲組
語法:

字符 

描述

示例

(?: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é)果,也不會分配組號,當(dāng)然也不能在表達(dá)式和程序中做進(jìn)一步處理。
首先(?:pattern)與(pattern)不同之處只是在于不捕獲結(jié)果。
接下來的四個非捕獲組用于匹配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++)
{
//顯示每個分組,可以看到每個分組都只有組號為1的項,反向回查和反向預(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ù)

這個不解釋了。

相關(guān)文章

  • 又一不錯的應(yīng)用-正則來查找替換字符串

    又一不錯的應(yīng)用-正則來查找替換字符串

    又一不錯的應(yīng)用-正則來查找替換字符串...
    2007-08-08
  • 正則表達(dá)式(regex)簡介和基本用法小結(jié)

    正則表達(dá)式(regex)簡介和基本用法小結(jié)

    正則表達(dá)式 (regex) 是用于模式匹配和文本操作的強(qiáng)大工具, 它們廣泛應(yīng)用于編程、文本處理、數(shù)據(jù)驗(yàn)證等領(lǐng)域,這篇文章主要介紹了正則表達(dá)式 (regex) 簡介和基本用法,需要的朋友可以參考下
    2024-04-04
  • 正則表達(dá)式教程之前后查找lookaround詳解

    正則表達(dá)式教程之前后查找lookaround詳解

    這篇文章主要介紹了正則表達(dá)式教程之前后查找lookaround,結(jié)合具體問題分析了向前查找及向后查找功能的實(shí)現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2017-01-01
  • 深入理解正則表達(dá)式語法知識

    深入理解正則表達(dá)式語法知識

    這篇文章主要介紹了正則表達(dá)式語法知識的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • 比較常用的幾個正則表達(dá)式匹配數(shù)字(收藏)

    比較常用的幾個正則表達(dá)式匹配數(shù)字(收藏)

    正則表達(dá)式用于字符串處理、表單驗(yàn)證等場合,實(shí)用高效。今天小編給大家分享比較常用的幾個正則表達(dá)式匹配數(shù)字,需要的朋友參考下
    2017-03-03
  • 史上最全正則表達(dá)式合集(馬上收藏)

    史上最全正則表達(dá)式合集(馬上收藏)

    這篇文章主要介紹了史上最全正則表達(dá)式合集(馬上收藏),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 匹配價格的正則表達(dá)式

    匹配價格的正則表達(dá)式

    網(wǎng)上找了一些關(guān)于價格的正則表達(dá)式,但是限定整數(shù)范圍的貌似都沒什么效果,今天把兩個表達(dá)式拼了一下,拼成一個
    2009-11-11
  • 簡單高效有用的正則表達(dá)式

    簡單高效有用的正則表達(dá)式

    正則表達(dá)式是一組由字母和符號組成的特殊文本,它可以用來從文本中找出滿足你想要的格式的句子,這里為大家分享如何編寫簡單高效有用的正則表達(dá)式,需要的朋友可以參考下
    2020-02-02
  • 深入淺出解析正則表達(dá)式-替換原則

    深入淺出解析正則表達(dá)式-替換原則

    本文給大家分享的正則表達(dá)式的替換原則,這里講到的替換是只能在替換模式中識別的語言元素。感興趣的朋友跟著小編一起學(xué)習(xí)吧
    2015-09-09
  • 正則表達(dá)式口訣 正則表達(dá)式學(xué)習(xí)工具

    正則表達(dá)式口訣 正則表達(dá)式學(xué)習(xí)工具

    正則表達(dá)式口訣 + 常用的正則表達(dá)式 + 正則表達(dá)式學(xué)習(xí)工具+正則處理工具 正則是每個程序員繞不開的堡壘,只有把它攻下來。我覺得正則之所以難,第一難是需要記憶,第二難是要求具備抽象邏輯思維。
    2008-08-08

最新評論

潼关县| 渭源县| 许昌县| 启东市| 邢台市| 承德市| 临夏市| 平湖市| 安西县| 通城县| 缙云县| 威信县| 石泉县| 苏州市| 木里| 鸡西市| 文登市| 陇川县| 清涧县| 台南市| 兴宁市| 宜兴市| 汪清县| 金华市| 潼关县| 蓝山县| 卫辉市| 乌海市| 巴楚县| 梅州市| 浮山县| 新疆| 常山县| 图们市| 鄂温| 红安县| 四川省| 兴国县| 石泉县| 张家口市| 龙山县|