日期:2014-05-17  浏览次数:20826 次

正则匹配网页源码的闭合标签
有一段网页信息:

<TR>
<TD height=284 vAlign=top width=19 align=center>&nbsp;</TD>
<TD vAlign=top width=222 align=center>
<TABLE border=0 cellSpacing=0 cellPadding=0 width=222>
<TBODY>
<TR>
<TD style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; PADDING-TOP: 8px" bgColor=#ffffff height=206 vAlign=middle align=center>
<A style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" href="http://item.taobao.com/item.htm?id=16648267291" target=_blank>
<IMG border=none src="http://img03.taobaocdn.com/bao/uploaded/i3/18405019272778611/T1KTwWXglXXXXXXXXX_!!0-item_pic.jpg_360x360.jpg" width=206>
</A>
</TD>
</TR>
</TABLE>
</TD>
</TR>

现在我已经匹配到了其中的:
<TD vAlign=top width=222 align=center>
<TABLE border=0 cellSpacing=0 cellPadding=0 width=222>
<TBODY>
<TR>
<TD style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; PADDING-TOP: 8px" bgColor=#ffffff height=206 vAlign=middle align=center>
<A style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" href="http://item.taobao.com/item.htm?id=16648267291" target=_blank>
<IMG border=none src="http://img03.taobaocdn.com/bao/uploaded/i3/18405019272778611/T1KTwWXglXXXXXXXXX_!!0-item_pic.jpg_360x360.jpg" width=206>
</A>
</TD>
</TR>
</TABLE>
</TD>

现在我想匹配出最外层的闭合标签<TR></TR>,默认不知道上一级的标签名称是什么。
我采用的方法是
private string GetParentTag(string str, string content)
        {
            str = str.Replace(".", @"\.").Replace("*", @"\*").Replace("?", @"\?");
            string pattern = "(?is)<[^/<>]*?>[^<>]*?" + str + "[^<>]*?<[^<>]*?>";
            Regex reg = new Regex(pattern);
            Match mc = reg.Match(content);
            if (mc != null && mc.Success)
            {
                return mc.Value;
            }
            else
            {
                return string.Empty;
            }
        }

这样匹配出来的,是一个错误的,被前面<TD height=284 vAlign=top width=19 align=center>&nbsp;</TD>给优先取到了。<