【发布时间】:2010-10-16 14:45:54
【问题描述】:
我看到人们犯over 和over again 的一个错误是尝试使用正则表达式解析XML 或HTML。以下是解析 XML 和 HTML 困难的几个原因:
人们希望将文件视为一系列行,但这是有效的:
<tag
attr="5"
/>
人们希望将
<img src="imgtag.gif" alt="<img>" />
人们通常希望将开始标签与结束标签匹配,但 XML 和 HTML 允许标签包含自己(传统的正则表达式根本无法处理):
<span id="outer"><span id="inner">foo</span></span>
人们经常希望匹配文档的内容(例如著名的“查找给定页面上的所有电话号码”问题),但数据可能会被标记(即使在查看时看起来很正常) :
<span class="phonenum">(<span class="area code">703</span>)
<span class="prefix">348</span>-<span class="linenum">3020</span></span>
评论可能包含格式错误或不完整的标签:
<a href="foo">foo</a>
<!-- FIXME:
<a href="
-->
<a href="bar">bar</a>
您还知道哪些其他问题?
【问题讨论】:
-
网络浏览器每秒能理解这种混乱数百万次,难道不能有人为我们这些凡人创建一个网页解析器类吗?
-
乔恩,他们有。在 Perl 中有许多 HTML::Parser、HTML::TreeBuilder 等。几乎可以肯定有一个适合您的语言。
-
Jon,您在寻找什么语言,您是否在寻找解析格式良好的 XML 或您在网络上获得的 HTML 标签汤?
-
最好的答案是,stackoverflow.com/a/1732454/135078(当心 Zalgo)
-
这是a good explanation of how you certainly can parse HTML with patterns,以及您可能不希望这样做的原因。