日期:2014-05-18  浏览次数:20412 次

一个正则的问题 我哪里写错了? 提取的是空的。。。
HTML code

<div class="tb-detail-hd">
    <h3><a href="http://detail.tmall.com/venus/spu_detail.htm?spu_id=136191697&amp;no_switch=1&amp;default_item_id=13133052500" target="_blank">【五折】Jack Jones杰克琼斯连帽含羊毛双层毛衣B浅211425001104</a></h3>
    <p>                <span>
                                                                                                                                                    举报此商品(<a href="http://support.taobao.com/myservice/suit/accuse_punish.jhtml?auction_num_id=13133052500&amp;display_type=3">举报</a>)
                                                    </span>
    </p>
</div>



想提取 class为tb-detail-hd div 下面的 h3  

我现在的写法:reg = @"(?is)<div class=""tb-detail-hd""><h3>(<a[^>]*>)?([^<]*)(</a>)?</h3></div>"; 

提取是空的 
如果 写成 reg = "<h3>(<a[^>]*>)?([^<]*)(</a>)?</h3>"; 
虽然可以提取但是页面有别的h3标签 那么也一并提取了 求教了。。。

------解决方案--------------------
<div class=""tb-detail-hd""><h3>
<h3>前面有空格符
------解决方案--------------------

C# code


Regex re = new Regex("(?is)<div\\s*class=\"tb-detail-hd\">[^<]+<h3>(.*?)</h3>.*?</div>", RegexOptions.None);

------解决方案--------------------

LZ的那个改一下。。。也可以

Regex re = new Regex("(?is)<div\\s*class=\"tb-detail-hd\">\\s*<h3>(<a[^>]*>)?[^<]*(</a>)?</h3>.*?</div>", RegexOptions.None);


------解决方案--------------------
C# code

string strMatch = Regex.Match(strHtml, @"(?<=<div class=""tb-detail-hd"">\s*)<h3>(<a[^>]*>)?([^<]*)(</a>)?</h3>", RegexOptions.IgnoreCase).Value;
return strMatch;

------解决方案--------------------
改一下
reg = @"(?is)<div class=""tb-detail-hd""><h3>(<a[^>]*>)?(.*?)(</a>)?</h3></div>";