如何构建HTML解析器?

如何构建HTML解析器?,第1张

概述在开始链接到 RegEx match open tags except XHTML self-contained tags之前阅读整个问题. 我想编写一个HTML解析器(仅针对HTML 5,它应检查它是否为HTML 5,如果不是,则返回错误)只是为了让自己学到新的东西,但我不知道什么是最好的方法去做.让我举个例子: <!doctype html><html><head> <!-- #T 在开始链接到 RegEx match open tags except XHTML self-contained tags之前阅读整个问题.

我想编写一个HTML解析器(仅针对HTML 5,它应检查它是否为HTML 5,如果不是,则返回错误)只是为了让自己学到新的东西,但我不知道什么是最好的方法去做.让我举个例子:

<!DOCTYPE HTML><HTML><head>    <!-- #Title -->    <Title>Just an example</Title></head><body>    <p class='main'>Simple paragraph with an <a href='/a.HTML'>anchor</a></p></body></HTML>

现在,有人能告诉我如何解析这个(最终形式无所谓,只是一个概念)?我有一些想法(比如使用递归函数,或者引用包含实际标记的数组),但我不认为这些是最好的概念.
我应该通过char检查char,然后调用特定的函数或使用正则表达式(如下所述)?

通过使用正则表达式,我并不是指整个标签的一种模式.我的意思是使用一个模式用于标记名(如果这个模式返回true,请检查下一个模式),然后是属性(如果这个返回true,再次检查),最后检查标记的结尾.

找到标签后该怎么办?运行一个循环来检查标签(如果它找到标签,再次调用它……)?但对我来说,当函数X调用Y调用X时,它似乎是递归函数或至少半递归…

所以最后一个问题是:最有效和最正确的结构是什么?

解决方法 编写基于SGML的解析器的最大部分是词法分析器.这是一篇关于构建自定义词法分析器的文章: http://onoffswitch.net/building-a-custom-lexer/.

在我看来,正则表达式可能过度/不合适 – 你想要匹配HTML标记,逐字符解析可能是最好的方法.

总结

以上是内存溢出为你收集整理的如何构建HTML解析器?全部内容,希望文章能够帮你解决如何构建HTML解析器?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1081550.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存