200分高手帮忙,求正则表达式匹配html的之间的内容?

来客心动 2006-06-27 09:28:42
我现在遇到一个问题,就是我知道一个开始标签,但是我如何去找到他的结束标签呢?

比如:

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">

请教高手如何写这个正则表达式?
...全文
950 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
CH_MARS 2006-06-29
  • 打赏
  • 举报
回复
up下
celas 2006-06-29
  • 打赏
  • 举报
回复
向楼上的同志致敬 !
低调的小青蛙 2006-06-29
  • 打赏
  • 举报
回复
如果搂是要解决:
<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


搂主的问题是可以使用正则表达式来解决的。
jingweicool 2006-06-28
  • 打赏
  • 举报
回复
用正则表达式好像有点困难
同意celas(长刀公主)说的方法

这个问题类似求括号配对. 用正则方法可能不行. 可以这样:

1) 字符串分析法求解: 建立一个计数器, 同时从前向后扫描 html 内容, 从要选择的段落开头开始, 每次读到一个 <td ..> 标签, 计数器加一, 每次读到一个 </td> 标签, 计数器减一, 如果 没有意外, 当计数器减为零时, 就找到了配对的 td 结束标签.

2) 用 XmlDocument 读取整段 html, 然后利用 DOM 的一系列方法选择出你要的内容.

celas 2006-06-28
  • 打赏
  • 举报
回复
还是推荐用 XmlDocument 或者 XPathDocument, 手动分析且用栈的话, 如果引号内部出现了类似 <td> 的文本, 那么问题分析的复杂度又上升了.
slex 2006-06-28
  • 打赏
  • 举报
回复
你用栈不是就很好解决么
用不着正则表达
dapang731 2006-06-28
  • 打赏
  • 举报
回复
up
myminimouse 2006-06-28
  • 打赏
  • 举报
回复
正则不可能做到,试别的办法吧
代码蜗牛sky 2006-06-28
  • 打赏
  • 举报
回复
单用正则应该做不到吧,加上堆栈的数据结构就可以了
来客心动 2006-06-28
  • 打赏
  • 举报
回复
看来没有人可以解决了,正则表达式的确难
coolxyq 2006-06-28
  • 打赏
  • 举报
回复
里面没有重复td的算法,有重复就出错
<td class="list">(\s\S]*?)<\/td>
如果是取得别人网页上的代码,试试多一些精确文字,少些模糊匹配符
kokubo_wing 2006-06-28
  • 打赏
  • 举报
回复
逻辑混乱
guodashao 2006-06-28
  • 打赏
  • 举报
回复
up
laughingrat 2006-06-28
  • 打赏
  • 举报
回复
guanzhu
baiyashan 2006-06-28
  • 打赏
  • 举报
回复
up
Eddie005 2006-06-27
  • 打赏
  • 举报
回复
<td class="list">与</td>之间还有</td>?
那么</td>怎么能叫结束标记呢,这本身就是矛盾的逻辑,正则不可能做到
levinknight 2006-06-27
  • 打赏
  • 举报
回复
不懂,帮你UP一下,顺便学习:)
celas 2006-06-27
  • 打赏
  • 举报
回复
关于上面提到的方法一, 我以前用 PHP 写过类似的分析代码, 用于 Wysiwyg WEB 编辑器的 HTML - UBB Code 的反向解析, 应用上是可行的.
celas 2006-06-27
  • 打赏
  • 举报
回复
这个问题类似求括号配对. 用正则方法可能不行. 可以这样:

1) 字符串分析法求解: 建立一个计数器, 同时从前向后扫描 html 内容, 从要选择的段落开头开始, 每次读到一个 <td ..> 标签, 计数器加一, 每次读到一个 </td> 标签, 计数器减一, 如果 没有意外, 当计数器减为零时, 就找到了配对的 td 结束标签.

2) 用 XmlDocument 读取整段 html, 然后利用 DOM 的一系列方法选择出你要的内容.
kittles 2006-06-27
  • 打赏
  • 举报
回复
xxxxxxxxxxxxxxxxxxxxx
<td class="list">
<table><tr><td>xxxxxxxxxxxxxxxxxxxxxxx</td></tr></table>
<p>xxxxxxxxxxxx</p><br>
ddddddddddddd
<img src="sss">
</td>
xxxxxxxxxxxxxxxxxxxxxx

附加个标签。或者在前后多选取一部分
加载更多回复(1)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧