加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – HTML解析器如何工作?

发布时间:2020-12-14 06:25:14 所属栏目:百科 来源:网络整理
导读:我已经看过幽默的线索并阅读警告,我知道 you don’t parse HTML with regex.别担心……我不打算尝试它. 但是……这让我想问:HTML解析器是如何编码的(包括编程语言的内置函数,如DOM解析器和PHP的strip_tags)?他们使用什么机制来解析(有时是格式错误的)标记
我已经看过幽默的线索并阅读警告,我知道 you don’t parse HTML with regex.别担心……我不打算尝试它.

但是……这让我想问:HTML解析器是如何编码的(包括编程语言的内置函数,如DOM解析器和PHP的strip_tags)?他们使用什么机制来解析(有时是格式错误的)标记?

我找到了0700的source,它实际上使用正则表达式来完成这项工作:

// Regular Expressions for parsing tags and attributes
var startTag = /^<(w+)((?:s+w+(?:s*=s*(?:(?:"[^"]*")|(?:'[^']*')|[^>s]+))?)*)s*(/?)>/,endTag = /^</(w+)[^>]*>/,attr = /(w+)(?:s*=s*(?:(?:"((?:.|[^"])*)")|(?:'((?:.|[^'])*)')|([^>s]+)))?/g;

他们都这样做吗?是否有传统的标准方法来编写HTML解析器?

我不知道那种风格是一种“正常”的做事方式.它比我见过的大多数都要好,但它仍然与我在 this answer中称之为“天真”的方法过于接近.首先,它并不能说明HTML评论妨碍了事情的发展.还有一些法律但有些事实是它没有处理的实体.但这是大多数此类方法落后的HTML评论.

更自然的方法是使用词法分析器剥离令牌,更像是如in this answer’s script所示,然后有意义地组装.词法分析者可以很容易地了解HTML注释.

您可以使用完整的语法来处理此问题,例如用于解析RFC 5322邮件地址的shown here.这就是我在this answer中第二个“向导”解决方案中采用的那种方法.但即使这只是格式良好的HTML的完整语法,我只对几种不同类型的标签感兴趣.我完全定义的那些,但我没有为我不关心的标签定义有效字段.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读