【问题标题】:What is the difference between a group and match in .NET's RegEx?.NET 的 RegEx 中的组和匹配有什么区别?
【发布时间】:2008-08-26 22:23:25
【问题描述】:

.NET 的 RegEx 中的 GroupMatch 有什么区别?

【问题讨论】:

    标签: .net regex


    【解决方案1】:

    Match 是一个对象,表示与目标文本(一部分)匹配的特定正则表达式。 Group 表示匹配的一部分,如果原始正则表达式包含组标记(基本上是括号中的模式)。例如,使用以下代码:

    string text = "One car red car blue car";
    string pat = @"(\w+)\s+(car)";
    Match m = r.Match(text);
    

    m 将是包含两个组的匹配对象 - 组 1,来自 (\w+),捕获“One”,组 2(来自 (car))匹配“汽车”。

    【讨论】:

      【解决方案2】:

      匹配是匹配正则表达式的字符串的一部分,因此在一个字符串中可能有多个匹配项。

      在匹配中,您可以定义匿名或命名组,以便更轻松地拆分匹配。一个简单的例子是创建一个正则表达式来搜索 URL,然后使用其中的组来查找协议 (http)、域 (www.web.com)、路径 (/lol/cats.html) 和参数等等。

      // Example I made up on the spot, probably doesn't work very well
      "(?<protocol>\w+)://(?<domain>[^/]+)(?<path>/[^?])"
      

      正如我所说,可以在字符串中多次找到单个模式,因此如果您使用 Regex.Matches(string text) 您将返回多个匹配项,每个匹配项由零个、一个或多个组组成。

      可以通过数字索引或字符串来找到这些命名组。上面的例子可以这样使用:

      Match match = pattern.Match(urls);
      if (!match.Success) 
          continue;
      string protocol = match.Groups["protocol"].Value;
      string domain = match.Groups[1].Value;
      

      为了让事情更有趣,一组可以匹配多次,但我建议开始阅读documentation

      您还可以使用组来生成反向引用,并进行部分搜索和替换,但在MSDN 上阅读更多内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-23
        • 2019-02-19
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 2010-11-14
        • 2012-04-18
        相关资源
        最近更新 更多