数据的格式是这样的
<div id='test1'>
  <div id='test2'>ttt1</div>
  <div id='test3'>ttt2</div>
  ...
</div>
我想根据id=test1直接得到整个div的结构,不过,我不会用嵌套的正则,也没什么思路,大家晓得吗?

解决方案 »

  1.   

    没人回答,还是我自己答吧,刚搞明白,这个可以。
    (?><div id='test1'.*?(?=<div id='test1'|</div id='test1'>|\z))(?!</div id='test1'>)
      

  2.   

    </div id='test1'>
    有这种结束标记吗?
      

  3.   

    好像得用正则的平衡组,但不知道php是否支持,大家有知道的吗?
      

  4.   

    支持平衡组。不过这种嵌套标签想得到结构正则不好处理,还是DOM比较方便。
      

  5.   

    老实说dom处理比较复杂的页面,效率确实不咋地,可以说很差,我测试过simple_html_dom.php这个类,效率简直是不能接受,我测试了个比较复杂的msn页面,打印出我要的数组数据,既然可以把我的机子将近搞挂。
      

  6.   

    使用单行模式,尝试这个正则:
    <div\s*id=(['"]?)test1\1>(.*?<div[^>]*>.*?</div>.*?)*</div>不懂php,如果c#下,我就这样写了:
    MessageBox.Show(Regex.Match(yourStr,@"(?is)<div\s*id=(['"]?)test1\1>(.*?<div[^>]*>.*?</div>.*?)*</div>").Value);