正则表达式的Match,Group,Capture类

我们从外往内讲起(我觉得这样更好理解些),首先Match类表示一个最终的匹配,一个正则不一定只有一个匹配,这个可以通过Match.NextMatch来尝试下面的匹配。而正则表达式中的所有组(Group)可以通过Match的Groups属性得到。组可以通过索引值得到,也可以通过名称得到。(没有名称的组排在有名称组的前面),不过注意的是所有组都是以1开始的。以0开始的那个组(Groups[0])代表着整个正则表达式(可以不整个正则表达式看成一个最大的组)。

 

在组内(Group类),可以通过Captures获取组的捕获信息(对应Capture类)。Group有一个Success属性代表捕获是否成功,实际上就是通过判断Captures的Count是不是等于0.

 

这个捕获(Capture类)代表组的具体匹配位置,Index属性可以获取匹配位置在整个字符串中的索引值,还是Value代表匹配的字符串值。Length就是匹配字符串值的长度。

 

最后注意Capture,Group和Match类有继承关系的,即Capture的成员Group和Match都会有,Group的成员Match也会有的。

 

最后看MSDN上的一个示例(引用自:http://msdn.microsoft.com/zh-cn/library/system.text.regularexpressions.capture.aspx

 

代码:

using System;

using System.Text.RegularExpressions;

 

public class Example

{

    public static void Main()

    {

        string input = "Yes. This dog is very friendly.";

        string pattern = @"((\w+)[\s.])+";

        foreach (Match match in Regex.Matches(input, pattern))

        {

            Console.WriteLine("Match: {0}", match.Value);

            for (int groupCtr = 0; groupCtr < match.Groups.Count; groupCtr++)

            {

                Group group = match.Groups[groupCtr];

                Console.WriteLine("   Group {0}: {1}", groupCtr, group.Value);

                for (int captureCtr = 0; captureCtr < group.Captures.Count; captureCtr++)

                    Console.WriteLine("      Capture {0}: {1}", captureCtr,

                                      group.Captures[captureCtr].Value);

            }

        }

    }

}

 

输出:

Match: Yes.

   Group 0: Yes.

      Capture 0: Yes.

   Group 1: Yes.

      Capture 0: Yes.

   Group 2: Yes

      Capture 0: Yes

Match: This dog is very friendly.

   Group 0: This dog is very friendly.

      Capture 0: This dog is very friendly.

   Group 1: friendly.

      Capture 0: This

      Capture 1: dog

      Capture 2: is

      Capture 3: very

      Capture 4: friendly.

   Group 2: friendly

      Capture 0: This

      Capture 1: dog

      Capture 2: is

      Capture 3: very

      Capture 4: friendly


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值