日期:2014-05-18  浏览次数:20574 次

请问怎么样判断一Html标签是否闭合
一段文本其中包含有Html标签,怎么才能判断其中的每一个Html标签是否是闭合的呢?如果不是闭合的自动加上相应的结束标签,应该怎么做呢?

例: <div   id= "tst "> adsaaaaaaaaaaaaaaaaaa <font> sfddddddddddddddd </font> sfddddd <b> sfdddddddd

这么一段字符,怎么样得出 <b> 和 <div> 没有闭合,并在最后加上 </b> 和 </div> 啊?

谢谢,各位高手帮忙解答一下。

------解决方案--------------------
以前有人为过,未得正解,顶一下,沙发
------解决方案--------------------
判断闭合不难。

根据集合,找到一个标签,就去尝试对比是否有闭合对应的标签。

自动添加困难,因为无法知道添加在哪里。
------解决方案--------------------
用正则判断 <b <div 的个数 和 </b </div 的个数比较 相等就闭合了
不过没检查是否正确对应 呵呵
------解决方案--------------------
固不固定 不都是在字符串中么 用正则怎么不行呢?
------解决方案--------------------
这个正则比较麻烦,还存在着嵌套的关系,要把层次理出来,并不只是贪婪那么简单了
------解决方案--------------------
<html>
<head>
</head>
<body>
<div id= "code ">
<font> <strong> sdfds
</div>
<div id= "temp " style= "display:none; ">

</div>
<script type= "text/javascript ">
document.getElementById( "temp ").innerHTML=document.getElementById( "code ").innerHTML;
alert(document.getElementById( "temp ").innerHTML);
</script>
</body>

</html>
------解决方案--------------------
这个问题我 回答过一次 你看一下大家意见

http://community.csdn.net/Expert/TopicView3.asp?id=5556330


自动闭合是吧?
教你一个偷懒的办法,用一个用户看不见的div,临时生成一个也可以,令其innerHTML=你的代码;然后再取这个div的innerHTML看看,你会很高兴地发现浏览器已经给你把标签配好对了。

来源是:

http://bbs.blueidea.com/viewthread.php?tid=2709194
------解决方案--------------------
允不允许交叉
<b>
<div>
</b>
</div>
------解决方案--------------------
难题
------解决方案--------------------
不太好办!up
------解决方案--------------------
.Net的正则引擎不是支持平衡组吗 想到一个办法 不过不太好 :(
不懂.Net 只能给出伪代码了

正则reg:
^[^ <> ]*(?: <(?!/)(? <o> [^\s <> ]+)(?:\s[^ <> ]*)?(?:(? <-o> /> )|> )[^ <> ]*|(? <-o> </\k <o> > [^ <> ]*))*(?(o)|(?!))$;
字符串str:
<div id= "tst "> adsaaaaaaaaaaaaaaaaaa <font> sfddddddddddddddd </font> sfddddd <b> sfdddddddd ";

while (匹配成功)
{
str = Regex.Replace(str, reg, "$0 </${o}> ") <--- 一次只能补一个 -_-#
}