代码之家  ›  专栏  ›  技术社区  ›  Xavier Poinas

.NET正则表达式-短匹配

  •  1
  • Xavier Poinas  · 技术社区  · 14 年前

    我有一个关于.NET正则表达式以及它如何定义匹配的问题。 我写的是:

    var regex = new Regex("<tr><td>1</td><td>(.+)</td><td>(.+)</td>");
    if (regex.IsMatch(str))
    {
        var groups = regex.Match(str).Groups;
        var matches = new List<string>();
        for (int i = 1; i < groups.Count; i++)
            matches.Add(groups[i].Value);
    
        return matches;
    }
    

    我想要的是获取以下两个标签的内容。相反,它返回:

    [0]: Cell 1</td><td>Cell 2</td>...
    [1]: Last row of the table
    

    为什么第一个匹配将占用</td>和字符串的其余部分而不是停止在</td>?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Greg Hewgill    14 年前

    正则表达式包括

    (.+)
    

    哪个是 贪婪的 比赛。贪婪匹配扩展为 远的 在匹配下一个字符之前( < 在你的情况下)。尝试:

    (.+?)
    

    这是一个 非贪婪 匹配扩展为 小的 在匹配下一个字符之前。

        2
  •  1
  •   cHao Hammerite    14 年前

    您需要指定延迟匹配。而不是 + 使用 +? 要说尽可能少的字符应该匹配。