Match Class

 

一、範例

1、

using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Match m = Regex.Match("123456789", @"\d{3}");
                while (m.Success)
                {
                    Console.WriteLine("'{0}' found in the source code at position {1}.", m.Value, m.Index);
                    m = m.NextMatch();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                Console.ReadKey();
            }
        }
    }
}

執行結果為

 

二、Match Class 屬性有

1、Captures:當一組 Groups 擁有多組符合時,可以 iterate 全部值出來。

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string input = "This is a sentence. This is another sentence.";
        string pattern = @"\b(\w+\s*)+\.";
        Match match = Regex.Match(input, pattern);
        if (match.Success)
        {
            Console.WriteLine("Matched text: {0}", match.Value);
            for (int groupsCount = 1; groupsCount < match.Groups.Count; groupsCount++)
            {
                Console.WriteLine("   Group {0}:  {1}", groupsCount, match.Groups[groupsCount].Value);
                int captureCount = 0;
                foreach (Capture capture in match.Groups[groupsCount].Captures)
                {
                    Console.WriteLine("      Capture {0}: {1}", captureCount, capture.Value);
                    captureCount++;
                }
            }
        }
    }
}

執行結果

說明:

a、第一次 Regex.Match() 會 match 到 「This is a sentence.」,下一次才是「This is another sentence.」。

b、RegexOptions 預設是 LeftToRight,此作用將會使一組 Groups 擁有多組符合時,

將會回傳最後一組值,也就是最右邊那一組「sentence」。

c、Captures 的作用為當一組 Groups 擁有多組符合時,可以 iterate 全部值出來。

 

2、Groups:取出這次比對的結果之群組。

using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Match m = Regex.Match("123abc456def789", @"(\d{3})([a-z]{3})");
                while (m.Success)
                {
                    for (int i = 0; i < m.Groups.Count; i++)
                    {
                        if (i == 0)
                        {
                            Console.WriteLine("the couple group is: {0}", m.Groups[i]);
                            Console.WriteLine("the couple group is: {0}", m.Value);
                        }
                        else
                        {
                            Console.WriteLine("the couple group the NO{0} group is: {1}", i, m.Groups[i].Value);
                        }
                    }
                    m = m.NextMatch();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                Console.ReadKey();
            }
        }
    }
}

執行結果為

說明:

a、Groups[0] 固定是整組所比對到的值,相等於 Match.Value 屬性。

b、其後的 Groups[1]、Groups[2] 才是該組各別所比對到的值。

 

3、Index:指出所比對到的位置。(index 從 0 位置開始算起)

4、Success:取出這次比對的結果,是否成功或失敗。

5、Value:指出所比對到的值。

 

三、Match Class 方法有

1、NextMatch():故名思意就是取得下一次的 Match。

 

參考資料:

Match Class

MatchCollection Class