XML解析器与正则表达式

时间:2011-08-16 23:05:24

标签: php xml regex parsing html-parsing

我应该使用什么?

我将获取链接,图像,文本等,并使用它来构建seo统计信息和页面分析。

您建议使用什么? XML解析器或正则表达式

我一直在使用正则表达式并且从来没有遇到任何问题但是,我一直听到人们说它不能做某些事情而且等等等等......但说实话我不知道为什么但是我我害怕使用XML解析器而不喜欢正则表达式(它的工作原理非常好)

所以,如果一切正常与正则表达式,为什么我在这里问你要用什么?好吧,我认为即使到目前为止一切都很好并不意味着它将来也是如此,所以我只是想知道在正则表达式上使用XML解析器有什么好处?是否有任何改进的性能,更少的错误,更好的支持,其他闪耀功能等?

如果你的确建议使用XML解析器,那么建议使用PHP解析器

我非常想知道你为什么选择一个而不是另一个?

3 个答案:

答案 0 :(得分:5)

  

我应该使用什么?

您应该使用an XML Parser

  

如果你的确建议使用XML解析器,那么建议使用PHP解析器

请参阅:Robust and Mature HTML Parser for PHP

答案 1 :(得分:2)

如果您正在处理真实世界(X)HTML,那么您将需要一个HTML解析器而不是XML解析器,因为XML解析器需要在它们遇到格式错误时立即停止解析,这几乎是立即使用大多数HTML。

反对正则表达式处理HTML的要点是它不可靠。对于任何正则表达式,都会有HTML页面失败。 HTML解析器与正则表达式一样易于使用,并且像浏览器一样处理HTML,因此非常可靠,并且很少有任何理由不使用它。

一个可能的例外是用于统计目的的抽样。假设您要扫描100,000个网页以获得相当简单的模式,例如,存在特定属性,并返回您获得的匹配页面的百分比。虽然即使是设计良好的正则表达式也可能产生误报和漏报,但它们不太可能影响整体百分比得分。您可以接受这些错误匹配,以获得正则表达式扫描可能比每个页面的完整解析更快地运行的好处。然后,您可以通过仅在返回正则表达式匹配的页面上运行解析来减少误报的数量。

要查看会导致正则表达式出现问题的问题,请参阅:Can you provide some examples of why it is hard to parse XML and HTML with a regex?

答案 2 :(得分:0)

听起来好像你正在进行屏幕抓取。这不可避免地是一个有点启发式的过程 - 你正在寻找通常出现在感兴趣的网页中的模式,你不可避免地会错过其中的一些,而你并不介意。例如,你真的不在乎你对img标签的搜索也会发现一个恰好被注释掉的img标签。如果这是您的应用程序的特征,那么通常对使用正则表达式处理HTML或XML的限制可能不适用于您的情况。