站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        正則表達式之捕獲組/非捕獲組介紹

        捕獲組
        語法:

        字符 

        描述

        示例

        (pattern)

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

         (abc)+d

        匹配abcd或者abcabcd

        (?<name>pattern)

        (?’namepattern)

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

         

        num

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

        (w)(w)21

        匹配abba

        k< name >

        k’ name

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

        (?<group>w)abck<group>

        匹配xabcx

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

        下面在程序中處理命名捕獲組,顯示混合規(guī)則生成的組號,并利用捕獲組的內(nèi)容對源字符串進行替換。
        可以看到先對普通捕獲組進行編號,再對命名捕獲組編號。
        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);
        //匹配正則表達式
        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)

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

        ‘Windows (?!95|98|NT|2000)’

        匹配 “Windows3.1” 中的 “Windows”

        不匹配 “Windows2000” 中的 “Windows”。

        (?<=pattern)

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

        ‘2000 (?<=Office|Word|Excel)’

        匹配 ” Office2000″ 中的 “2000”

        不匹配 “Windows2000” 中的 “2000”。

        (?<!pattern)

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

        ‘2000 (?<!Office|Word|Excel)’

        匹配 ” Windows2000″ 中的 “2000”

        不匹配 ” Office2000″ 中的 “2000”。

        非捕獲組只匹配結(jié)果,但不捕獲結(jié)果,也不會分配組號,當(dāng)然也不能在表達式和程序中做進一步處理。
        首先(?: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是注釋,不對正則表達式的處理產(chǎn)生任何影響

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

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

        這個不解釋了。

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 日本一卡精品视频免费| 国产精品视频久久久| 91麻豆精品国产自产在线观看一区 | 国产精品偷伦视频观看免费 | 精品久久久久久国产潘金莲| 久久这里只有精品视频99| 久久er热视频在这里精品| 欧美成人精品高清在线观看| 日韩欧美一区二区三区中文精品| 91精品福利在线观看| 91原创国产精品| 精品久久久久久无码中文字幕一区| 无码人妻精品一区二区蜜桃百度| 国产乱人伦偷精品视频| 四虎国产精品永久地址51| 2022国产精品自产拍在线观看 | 91麻豆精品国产自产在线观看一区| 久久久久亚洲精品无码蜜桃| 亚洲午夜福利精品无码| 日韩精品中文字幕第2页| 麻豆精品| 欧美XXXX黑人又粗又长精品| 国产一区二区精品久久凹凸 | 国产精品视频网| 国产精品55夜色66夜色| 91精品国产9l久久久久| 精品久久久久久亚洲精品 | 人人妻人人澡人人爽欧美精品| 亚洲午夜福利精品久久| 在线精品亚洲一区二区三区| 亚洲精品高清在线| 免费视频成人国产精品网站| 精品视频一区二区三区四区五区| 日韩精品成人a在线观看| 国产韩国精品一区二区三区久久| 国产欧美精品一区二区色综合| 中文字幕乱码中文乱码51精品| 久久亚洲精品无码观看不卡| 久久se精品一区精品二区国产| 久久亚洲中文字幕精品一区| 欧美成人精品欧美一级乱黄一区二区精品在线 |