static void Main(string[] args)
        {
            string str = "<div>111<div>111_1</div>111</div><div>test000000</div>";
            Regex reg=new Regex(@"<div>.*\r*\n*\s*<div>");
            MatchCollection mc=reg.Matches(str);
            foreach(Match m in mc)
            {
                Console.WriteLine(m.Value);
            }
            Console.ReadKey();
        }
我想匹配
<div>111<div>111_1</div>111</div>
即对于有嵌套的,匹配最外层的
<div>test000000</div>
没嵌套的就直接匹配出来

解决方案 »

  1.   

    正则表达如下:Regex reg=new Regex(@"^[<div>].*[<\/div>]$"); 
      

  2.   

    你的匹配结果为:<div>111 <div>111_1 </div>111 </div> <div>test000000 </div>
    只有一组。
    我要的是把上面的字符串
    <div>111 <div>111_1 </div>111 </div> 这是一个满足条件的正则匹配结果
    <div>test000000 </div>这又是一个满足条件的结果。
      

  3.   


    //像下面的:
    Regex reg=new Regex(@"^<div>.*<\/div>$" ); Regex reg=new Regex(@"^<div><div>.*<\/div><\/div>$" ); 
      

  4.   

    Regex 
    reg=new Regex(@"^<div>.*<\/div>$" ); var my=/^<div>.*<div>.*<\/div><\/div>$/   //这个才符合你要的
      

  5.   


    string str = "<div>111 <div>111_1 <div>111_2 <div>111_3 </div>111_2 </div>111_1 </div>111 </div> <div>test000000 </div>";
    Regex re = new Regex("(?i)<div>[^<]*(<div>[^<]+)*(</div>[^<]+)*</div>");
    Match m = re.Match(str);
    While(m.Success)
    {
        Console.WriteLine(m.Value);
        m = m.NextMatch();
    }
    //  结果 :<div>111 <div>111_1 <div>111_2 <div>111_3 </div>111_2 </div>111_1 </div>111 </div> 和 <div>test000000 </div>
      

  6.   

    reg=new Regex(@"^<div>.*<\/div>$" ); //这样的话,无论你有多少层都匹配 //如果有这样<div>kk<div>111</div>222</div>的形式的话 ,再改一下,
    Regex reg=new Regex(@^<div>.*<div>.*<\/div>.*<\/div>$");   //这个才符合你要的
    //按照以上思路楼主可以随意改动
      

  7.   


    Regex reg=new Regex(@"^<div>.*<div>.*<\/div>.*<\/div>$");
      

  8.   

    引用 7 楼 benjaminwu198818 的回复C# code
    reg=new Regex(@"^<div>.*<\/div>$" ); //这样的话,无论你有多少层都匹配 
    /* 这样会匹配整个的字符串 如<div>111 <div>111_1 </div>111 </div> <div>test000000 </div> 
    而不是楼主所要的<div>111 <div>111_1 </div>111 </div> 和 <div>test000000 </div> */

     //如果有这样<div>kk<div>111</div>222</div>的形式的话 ,再改一下,
    Regex reg=new Regex(@^<div>.*<div>.*<\/div>.*<\/div>$");   //这个才符合你要的
    //按照以上思路楼主可以随意改动
    /* 虽然可以随意改动 但是如果不知道到底有多少层呢?  */
      

  9.   


    //楼主说 :即对于有嵌套的,匹配最外层的 …还有下面的这个正则…思路不错,不过存在
    错误,至少转义符号都没有…
    Regex re = new Regex("(?i)<div>[^<]*(<div>[^<]+)*(</div>[^<]+)*</div>");
      

  10.   


    哈哈  你很细心 
    不过不转义也不会错  
    当然了 要是在JavaScript中就必须转义了 因为 JavaScript中正则可以这样表示 /<div>[^<]*(<div>[^<]+)*(<\/div>[^<]+)*<\/div>/gi 
    其实我的代码里的 while 写错了 应该小写
      

  11.   

    //看来咱两该讨论一下:
    //呵呵下面的多了个.*这样子才会通配<div>000 <div>111_1 </div>111 </div> 里面的000Regex reg=new Regex(@"<div>.*[^<]*(<div>[^ <]+)*( <\/div>[^ <]+)*<\/div>")
      

  12.   

    怎么会过捏?<div>000 <div>111_1 </div>111 </div>,红色的,
    而这个<div>[^ <]*…匹配的是<div><div>000…,不是<div>000<div>…吧。