<div id="aaa">
  <div>1
  </div>2
</div>
<div class="aaa">
  <div>
    <div>My List</div>bbbbbbb
  </div>s
</div>s
<div class="aab">ac
  <div>sss</div>nnn
</div><div id="aaa">
  <div>1
  </div>2
</div>
<div class="aaa aab">
  My page
</div>s
<div class="aab">ac
  <div>sss</div>nnn
</div>
请问:这个正则怎么写?要匹配出class包含aaa的div所有内容。
第一个应匹配出 :
<div class="aaa">
  <div>
    <div>My List</div>bbbbbbb
  </div>s
</div>
第二个应匹配出:
<div class="aaa aab">
  My page
</div>

解决方案 »

  1.   

    使用xml操作岂不更加简单,使用xpath
      

  2.   

    看错了,试试这个
    <div class="aaa">(((?'Open'<[^<>]*>)[^<>]*)+((?'-Open'</[^<>]*>)[^<>]*)+)*(?(Open)(?!)))</div>
      

  3.   

    (?:<div\s+.*?aaa.*?>)(\s*(<(\w+).*?>.*?(</\1>)?|[^<>])+)(?:</div>)额,现在无法测试,标记一下
      

  4.   

     string testmcontent = "<div id=\"aaa\"><div>1</div>2</div><div class=\"aaa\"><div><div>My List</div>bbbbbbb </div>s</div>s<div class=\"aab\">ac<div>sss</div>nnn</div>";
                Regex regex = new Regex("<div class=\"aaa\">(((?'Open'<div>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>", RegexOptions.Multiline | RegexOptions.Compiled);
                MatchCollection matches = regex.Matches(testmcontent);
      

  5.   

    Regex reg = new Regex(@"(?is)<div\s+class=""aaa"">(?:(?!</?div\b).)*</div>");
    Match m = reg.Match(Str);
    if (m.Success)
    {
        str+= = m.Value;
    }
      

  6.   

    参考
    <div>.*?</div> 
    <DIV>((?!</DIV>).)*</DIV> 
      

  7.   

    额,要支持镶套, 还要判断中间的文本,单标签,不规则标签,< br> 像,<p>之类的,比较难做了
    试了下,我6楼的写的基本能用 ...
      

  8.   

    [code=C#] string str = @"<div id=""aaa"">
      <div>1
      </div>2
    </div>
    <div class=""aaa"">
      <div>
        <div>My List</div>bbbbbbb
      </div>s
    </div>s
    <div class=""aab"">ac
      <div>sss</div>nnn
    </div>
           afafadsfs
    <div class=""aaa bbb"">ac
      <div>aaabbbb</div>nnn
    </div>
           
    ";
            Regex reg =new Regex( "<div[^>]*?class=\"aaa\\s*[^\"]*?\"[^>]*?>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>");
          MatchCollection ms = reg.Matches(str);
             foreach(Match m in ms)
             {
                Response.Write(Server.HtmlEncode(m.Value)+"<BR>");
             }[/code]
      

  9.   

    try...string key = Regex.Escape(textBox1.Text);  //key为class中要包含的关键字
    Regex regDiv = new Regex(@"(?is)<div(?:(?!class=|>).)*class=(['""]?)(?=(?:(?!" + key + @").)*" + key + @")(?:(?!\1|>).)*\1[^>]*>(?>(?<o>)<div[^>]*>|(?<-o>)</div>|(?!</?div\b).)*(?(o)(?!))</div>");
    MatchCollection mc = regDiv.Matches(yourStr);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Value + "\n";
    }