问题在下面的C# 注释,完整代码,可以直接黏贴在你们的机器运行,帮帮忙吧。搞了2天了,郁闷咯  
    //过滤得到body里面的内容
    string regBody = "<body[^<>]*>(?:.|[\r\n])*</body>";    //过滤得到class="searchresult_box"的div
    string regDiv = "<div[^<>]*class=\"searchresult_box\"+[^<>]*>(?:.|[\r\n])*</div>";    //过滤得到id="flt_list"的div
    string regMainDiv = "<div.*[^<>]*.*id=\"flt_list\"+.*[^<>]*>(?:.|[\r\n])*</div>";
    protected void Button1_Click(object sender, EventArgs e)
    {
       
        string _strUrl = "http://www.wavin.cn/b.htm";
        // string _strUrl = "http://www.wavin.cn/c.htm";
        
        Regex regexDiv = new Regex(regDiv, RegexOptions.IgnoreCase);
        Regex regexBody = new Regex(regBody, RegexOptions.IgnoreCase);
        Regex regexMainDiv = new Regex(regMainDiv, RegexOptions.IgnoreCase);        //这句正常,把body以外的内容都过滤掉了
        lalContent.Text = regexBody.Match(GetHtmlCode(_strUrl)).Value;        //【【【【【【【【【【出错的地方】】】】】】】】】】】】
        //这句异常,不知道为何,当使用c.htm的源码时候就正常,看下面注释
        //lalContent.Text = regexDiv.Match(GetHtmlCode(_strUrl)).Value;        /*
         *页面http://www.wavin.cn/b.htm 放的是完整的html,
         *而http://www.wavin.cn/c.htm 放的是body里面的一个id=flt_list的div、以及子div集合
         *大家可以分别看下2个页面的源码,
         */
    }
        /// <summary>
    /// 通过IP获取地区
    /// </summary>
    /// <param name="ip">ip地址</param>
    /// <returns></returns>
    public string GetHtmlCode(string url)
    {
        string area = "";
        Stream fs = null;
        StreamReader sr = null;
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            fs = (System.IO.Stream)response.GetResponseStream();
            Encoding encode = System.Text.Encoding.GetEncoding("gb2312");
            sr = new StreamReader(fs, encode);
            area = sr.ReadToEnd();
            fs.Close();
            fs.Dispose();
            sr.Close();
            sr.Dispose();
        }
        catch (Exception ex)
        {            fs.Close();
            fs.Dispose();
            sr.Close();
            sr.Dispose();
            area = ex.Message;
        }        return area;
    }
 <div>
        <asp:Button ID="Button1" runat="server" Text="Button" 
            onclick="Button1_Click" />
    </div>
    <hr />
    <div class="selfDiv">
         <asp:Literal ID="lalContent" runat="server"></asp:Literal>
    </div>
正则表达式regex

解决方案 »

  1.   

    提取这个div层里面的所有内容:<div class="searchresult_box">
      

  2.   

    提取这个div层里面的所有内容:<div class="searchresult_box">
      

  3.   

     string str = "HTMLCode";
                str = Regex.Match(str, @"(?is)<div[^>]*?class=""searchresult_box""[^>]*?>((?<g><div)|(?<-g></div>)|(?!</?div).)*(?(g)(?!))</div>").Value;
               
      

  4.   

    嗯,受教了。谢谢
    你这个表达式我运行了,大功告成只差一步,好像仅得到一个<div class="searchresult_box">
    但源码里面有很多个<div class="searchresult_box">喔,我都要把他提取出来,这个该如何弄,用MatchCollection吗?
      

  5.   

    可以了,十分感谢啊!
    还有就是想问问您这个表达式
    我的是这样 <div[^<>]*class=\"searchresult_box\"+[^<>]*>(?:.|[\r\n])*</div>
    您的是这样 (?is)<div[^>]*?class=""searchresult_box""[^>]*?>((?<g><div)|(?<-g></div>)|(?!</?div).)*(?(g)(?!))</div>
    我的就太小儿科了···怎么分析你表达式呢?
      

  6.   

    前后和你的差不多,就是<div>和</div>中间用了一个平衡组而已,没什么深奥的东西