2010-05-28 22 views
1

我有一个关于.NET正则表达式的问题以及它如何定义匹配。 我写:.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 >停止?

+0

顺便说一句,强制性警告:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags#1732454 – cHao 2010-05-28 03:35:27

回答

3

你的正则表达式包括

(.+) 

其是贪婪匹配。贪婪的匹配延伸为远的,因为它们可以在匹配下一个字符(在您的案例中为<)之前。尝试:

(.+?) 

这是延伸为尽可能的下一个字符匹配之前非贪婪比赛。

1

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