如何在html字符串中找到匹配的结束标签?
想象一下以下 HTML:
<div>
<b></b>
<div>
<table>...</table>
</div>
</div> <!-- this one -->
...
我如何找到第一个开始 div 标签的匹配结束标签?有没有可以找到它的正则表达式?我想这是一个很常见的需求,但我正在努力寻找任何简单的、完整的 HTML 解析器。
Imagine the following HTML:
<div>
<b></b>
<div>
<table>...</table>
</div>
</div> <!-- this one -->
...
How could I find the matching closing tag for the first opening div tag? Is there a reg ex that could find it? I guess this is quite a common requirement but I'm struggling to find anything straightforward, just full blown HTML parsers.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
不。
使用完整的 HTML 解析器。它们存在是有原因的。
No.
Use a full blown HTML parser. There's a reason they exist.
使用Html Agility Pack。
Use Html Agility Pack.
我假设您已经标记了 html 标签...现在创建一个堆栈,每次您看到开始标签推送和每次看到结束标签弹出时...并查看您弹出的标签是否符合结束标签。 ..
但是已经有用于此目的的 HTML 解析器,因此请在 codeplex 上搜索一个。
I'm assuming that you have tokeinized the html tags... Now create a stack and every time you see an opening tag push and everytime you see a closing tag pop... and see if the ones you pop macth the closing tag...
But there are already HTML parsers for this so search for one on codeplex.
好吧,您需要对语法有一个“清晰”的了解!但是,正则表达式的范围非常有限,我不建议将它用于多行/标记语法。
您更需要跟踪每个标签(打开/关闭)并使用“处理程序”来处理您的请求。您可以使用一些 Lex/Yacc 工具,但这可能有点过分了。根据您使用的语言,您可能已经拥有用于此目的的模块(例如 Python 中的 HTMLParser)。
Well, You need to have a 'clear' view of the syntax ! However, regexp are very limited in scope and I would'nt recommand using it for multi-line/tag syntax.
You rather need to track each tag (open/close) and use a 'handler' to deal with your request. You could use some Lex/Yacc tools but this may be overkilling. Depending on the language you use, you may already have modules for this purpose (like HTMLParser in Python).
如果您想解析 HTML 并且不需要每一个小细节,那么总是可以使用 LinqToXml。
There's always LinqToXml if you want to parse HTML and don't need every little detail.