亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

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

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

    捕獲組
    語法:

    字符 

    描述

    示例

    (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

    使用小括號指定一個子表達(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á)式或程序中可以直接引用組名,當(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();
    }
    }
    }

    正則表達(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é)果,也不會分配組號,當(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();
    }
    }
    }

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

    字符

    描述

    示例

    (?#comment)

    comment是注釋,不對正則表達(dá)式的處理產(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號