我现在遇到一个问题,就是我知道一个开始标签,但是我如何去找到他的结束标签呢?比如:xxxxxxxxxxxxxxxxxxxxx
<td class="list"><table><tr><td>
xxxxxxxxxxxxxxxxxxxxxxx
</td></tr></table><p>xxxxxxxxxxxx</p><br>ddddddddddddd<img src="sss"></td>
xxxxxxxxxxxxxxxxxxxxxx
开始标签是:<td class="list">
结束标签是:</td>但是<td class="list">与</td>之间还有</td>所以不能简单的提取<td class="list"></td>之前的内容。我如何找到中间这部分呢?
也就是要
<table><tr><td>
xxxxxxxxxxxxxxxxxxxxxxx
</td></tr></table><p>xxxxxxxxxxxx</p><br>ddddddddddddd<img src="sss">请教高手如何写这个正则表达式?

解决方案 »

  1.   

    xxxxxxxxxxxxxxxxxxxxx
    <td class="list">
    <table><tr><td>xxxxxxxxxxxxxxxxxxxxxxx</td></tr></table>
    <p>xxxxxxxxxxxx</p><br>
    ddddddddddddd
    <img src="sss">
    </td>
    xxxxxxxxxxxxxxxxxxxxxx附加个标签。或者在前后多选取一部分
      

  2.   

    这个问题类似求括号配对. 用正则方法可能不行. 可以这样:1) 字符串分析法求解: 建立一个计数器, 同时从前向后扫描 html 内容, 从要选择的段落开头开始, 每次读到一个 <td ..> 标签, 计数器加一, 每次读到一个 </td> 标签, 计数器减一, 如果 没有意外, 当计数器减为零时, 就找到了配对的 td 结束标签.2) 用 XmlDocument 读取整段 html, 然后利用 DOM 的一系列方法选择出你要的内容.
      

  3.   

    关于上面提到的方法一, 我以前用 PHP 写过类似的分析代码, 用于 Wysiwyg WEB 编辑器的 HTML - UBB Code 的反向解析, 应用上是可行的.
      

  4.   

    <td class="list">与</td>之间还有</td>?
    那么</td>怎么能叫结束标记呢,这本身就是矛盾的逻辑,正则不可能做到
      

  5.   

    里面没有重复td的算法,有重复就出错
    <td class="list">(\s\S]*?)<\/td>
    如果是取得别人网页上的代码,试试多一些精确文字,少些模糊匹配符
      

  6.   

    还是推荐用 XmlDocument 或者 XPathDocument, 手动分析且用栈的话, 如果引号内部出现了类似 <td> 的文本, 那么问题分析的复杂度又上升了.
      

  7.   

    用正则表达式好像有点困难
    同意celas(长刀公主)说的方法这个问题类似求括号配对. 用正则方法可能不行. 可以这样:1) 字符串分析法求解: 建立一个计数器, 同时从前向后扫描 html 内容, 从要选择的段落开头开始, 每次读到一个 <td ..> 标签, 计数器加一, 每次读到一个 </td> 标签, 计数器减一, 如果 没有意外, 当计数器减为零时, 就找到了配对的 td 结束标签.2) 用 XmlDocument 读取整段 html, 然后利用 DOM 的一系列方法选择出你要的内容.
      

  8.   

    如果搂是要解决:
    <td class="list"> .... </td> .... </td>
    的问题,就请关注 "贪婪模式":
    http://www.regexlab.com/zh/regref.htm
    如果搂是要解决:
    <td class="list"> .... <td class="list"> .... </td> .... </td>
    的问题,就请关注 "递归匹配":
    http://www.regexlab.com/zh/regtopic.htm
    搂主的问题是可以使用正则表达式来解决的。