Pet*_*ter 8 regex html-parsing
我已经看过幽默的线程并阅读警告,我知道你不用正则表达式解析HTML.别担心...... 我不打算尝试它.
但是......这让我想问:HTML解析器是如何编码的(包括编程语言的内置函数,如DOM解析器和PHP的strip_tags)?他们使用什么机制来解析(有时是格式错误的)标记?
我找到了源的一个用JavaScript编码,它实际上使用正则表达式来完成这项工作:
// Regular Expressions for parsing tags and attributes
var startTag = /^<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,
endTag = /^<\/(\w+)[^>]*>/,
attr = /(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
Run Code Online (Sandbox Code Playgroud)
他们都这样做吗?是否有一种传统的标准方法来编写HTML解析器?
我不知道这种风格是 \xe2\x80\x9cnormal\xe2\x80\x9d 的做事方式。它比我见过的大多数\xe2\x80\x99要好,但它\xe2\x80\x99s仍然太接近我所说的\xe2\x80\x9cna\xc3\xafve\xe2\x80\x9d方法这个答案。一方面,它不考虑 HTML 注释的干扰。还有一些合法但不涉及的实体问题。但大多数此类方法都失败了。
\n\n一种更自然的方法是使用词法分析器剥离标记,更像是此answer\xe2\x80\x99s script 中所示,然后有意义地组装它们。词法分析器能够很容易地了解 HTML 注释。
\n\n您可以使用完整的语法来解决此问题,例如此处显示的用于解析 RFC 5322 邮件地址的语法。这就是我在这个答案中的第二个 \xe2\x80\x9cwizardly\xe2\x80\x9d 解决方案中采取的方法。但即便如此,这也只是格式良好的 HTML 的完整语法,而 I\xe2\x80\x99m 只对几种不同类型的标签感兴趣。我完全定义了那些,但我不\xe2\x80\x99t 为我不关心的标签定义有效字段。
\n 归档时间: |
|
查看次数: |
866 次 |
最近记录: |