<div id="a">里面嵌套的也有div</div>现在想取指定id的div中的所有内容。求一个匹配的正则。

解决方案 »

  1.   


    //或许,可以这样用
    var content=document.getElementById("a").innerHTML;
      

  2.   

    我做的是winform啊
    winform里怎么写js啊
    我不会
      

  3.   


    who can help me?
      

  4.   

    刚搜了下看到一个匹配div的正则,可不是指定的:<div[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>.
      

  5.   

    <div[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>
    这个可以抓取一些div但是不是我指定的div中的内容啊 
      

  6.   


    string html = @"
    <html>
    <body>
    <div id=""div1"">
        <div id=""div2"" style=""background:Red;"">
            <div id=""div3"">
                <table id=""table1"">
                    <tr>
                        <td>
                            <div id=""div4"" style=""width:100px""></div>
                        </td>
                    </tr>
                </table>
            </div>
        </div>
        <div id=div5>
            <a href=""http://www.csdn.net"">csdn</a>
        </div>
    </div>
    <img src=""http://www.csdn.net/Images/logo_csdn.gif""/>
    </body>
    </html>";
                Console.WriteLine(html);
                string[] idList = { "div1", "div2", "div3", "div4", "table1", "div5", "abc(def" };            /* TODO : 这里发挥 */
                string pattern = @"<([a-z]+)(?:(?!id)[^<>])*id=([""']?){0}\2[^>]*>(?>(?<o><\1[^>]*>)|(?<-o></\1>)|(?:(?!</?\1).))*(?(o)(?!))</\1>";            foreach (string id in idList)
                {
                    Match match = Regex.Match(html, string.Format(pattern, Regex.Escape(id)),
                        RegexOptions.Singleline | RegexOptions.IgnoreCase);
                    Console.WriteLine("--------begin {0}--------", id);
                    if (match.Success)
                        Console.WriteLine(match.Value);
                    else
                        Console.WriteLine("o(╯□╰)o");
                    Console.WriteLine("--------end {0}--------", id);
                }
                Console.ReadLine();
      

  7.   


    借用一下,            string input = @"<div id=""a"">AAA<div id=""b"">BB<div id=""c"">CCC</div> B</div> </div> ";
                string id = Console.ReadLine();  //输入要取得div的id
                while (id.Trim().ToUpper().CompareTo("G")!=0)
                {
                    string pattern = @"<div id=""" + id + @""">[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>";
                    Console.WriteLine(Regex.Match(input, pattern));
                    id = Console.ReadLine();
                }
      

  8.   

    这就不是正则的问题了,一般正则搞不定。
    最好多HTML解析,然后一层层的找。
      

  9.   


                string id = "test";
                string testStr = @"SDSD<DIV><div id=""test"">000<div>里面嵌套的也有div </div>5464<div>898hjgjh</div>SFSFfg</div>SFSFfgh756<div>dd</div> ";            string result = "";
                StringBuilder sb=new StringBuilder() ;
                Regex objRegex1 = new Regex(@"(<div\s+id=(['""])\s*"+id+@"\s*\2[^>]*>)", RegexOptions.IgnoreCase);
                Regex objRegex2 = new Regex(@"<div[^>]*>", RegexOptions.IgnoreCase);
                Regex objRegex3 = new Regex(@"</div>",RegexOptions.IgnoreCase);            if (objRegex1.IsMatch(testStr)) { 
                    string strMatch =objRegex1.Match(testStr).Value;
                    string tmpStr = objRegex1.Replace (testStr.Substring(testStr.IndexOf(strMatch)),"");                MatchCollection objMatchs1 = objRegex2.Matches(tmpStr);
                    MatchCollection objMatchs2 = objRegex3.Matches(tmpStr);                int k = objMatchs1.Count >= objMatchs2.Count - 1 ? objMatchs2.Count - 1 : objMatchs1.Count;                Response.Write(Server.HtmlEncode(string.Format("K : {0}", k)));
                    Response.Write(@"<br />");                Response.Write(Server.HtmlEncode(string.Format("tmpStr : {0}", tmpStr)));
                    Response.Write(@"<br />");
                    int divStart = 0, divEnd = 0;
                    int EndDivCount = 1;
                    string divEndMarkup = "";                for (int i = 0; i < k; i++) {
                        divStart = tmpStr.IndexOf(objMatchs1[i].Value );
                        divEnd = tmpStr.IndexOf(objMatchs2[i].Value);
                        if (divStart < divEnd)
                        {
                            EndDivCount++;                        divEndMarkup = objMatchs2[i].Value;
                            divEnd = tmpStr.IndexOf(divEndMarkup);                        sb.AppendFormat("{0}", tmpStr.Substring(0, divEnd));
                            sb.AppendFormat("{0}", divEndMarkup);
                            tmpStr = tmpStr.Substring(divEnd + divEndMarkup.Length);                    }
                        else {
                            --EndDivCount;
                            break;
                        }                  
                    }                divEndMarkup = objMatchs2[k].Value;
                    divEnd = tmpStr.IndexOf(divEndMarkup);                sb.AppendFormat("{0}", tmpStr.Substring(0, divEnd));                   result = sb.ToString();
                }
      

  10.   

    上面的代码去掉                Response.Write(Server.HtmlEncode(string.Format("K : {0}", k)));
                    Response.Write(@"<br />");                Response.Write(Server.HtmlEncode(string.Format("tmpStr : {0}", tmpStr)));
                    Response.Write(@"<br />");