【发布时间】:2011-06-29 15:00:10
【问题描述】:
我看过幽默的帖子并阅读了警告,我知道you don't parse HTML with regex。别担心... 我不打算尝试它。
但是...这让我问:HTML 解析器是如何编码的(包括编程语言的内置函数,如 DOM 解析器和 PHP 的 strip_tags)?他们采用什么机制来解析(有时是格式错误的)标记?
我找到了one coded in JavaScript 的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 解析器?
【问题讨论】:
-
在我读完你的问题后,你链接的那个步骤突然出现在我的脑海里 :)
-
您无法使用正则表达式解析非常规语言。您当然可以使用它们从已知的语言常规子集中提取信息(这就是他们正在做的事情),但仅此而已。
-
@NullUserException:别开玩笑了。我认为现在每个人都比这更清楚。
-
@tchrist:看起来不像
-
@tchrist:请实用并提供一个使用 pcre 并用 PHP 实现的解析器的示例。还是你只制造热空气?
标签: regex html-parsing