【问题标题】:php html parser performancephp html解析器性能
【发布时间】:2011-08-07 23:06:09
【问题描述】:

我需要从 html 文档中提取隐藏的输入

<input type="hidden" name="email" id="email" value="email%40hotmail.com">

我目前正在使用http://simplehtmldom.sourceforge.net/,但我想知道是否有更快的解决方案,RAM 使用率更低。输入位于文档中间的某处,因此不必加载整个 html 页面。正则表达式会更快吗? 我将不得不处理数百万个文档。为了清楚起见,我只需要提取 email%40hotmail.com

【问题讨论】:

    标签: php html-parsing


    【解决方案1】:

    我发现DomDocumentXPath 速度很快,而且记忆力很好。另一个好处是,这是使用已定义的标准,非常独立且易于访问,并且通常需要完成工作所需的任何东西,因此可能比加载使用相同的库更轻量级。

    一个简单的字符串搜索(寻找开始模式,寻找结束模式)可能会更快,但如果文档发生变化,它就不能很好地扩展。然而,这甚至比编译和运行正则表达式还要快。

    【讨论】:

      【解决方案2】:

      如果您只需要与该格式完全匹配,那么请使用正则表达式。你不能用它做通用的 html 解析,但是你可以得到一个简单的模式。

      这样就可以了:

      <input type="hidden" name="email" id="email" value="([^"]*)">
      

      通配符匹配任何非双引号字符。不要忘记解码 html 实体。

      【讨论】:

      • 我只希望得到 VALUE 而不是整个输入。如果我打印你给我的模式,我会得到 [0] => Array ( [0] =>
      • @Michael 您在要捕获的部分周围添加括号。我为你修改了答案。
      【解决方案3】:

      你可以这样做:

      $html = '<input type="hidden" name="email" id="email" value="email%40hotmail.com">';
      preg_match('%<input type="hidden" name="email" id="email" value="([^\"]+)">%', $html, $email);
      

      已编辑

      我错了,正则表达式更快。

      【讨论】:

        猜你喜欢
        • 2015-08-25
        • 1970-01-01
        • 2011-05-18
        • 2012-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-17
        相关资源
        最近更新 更多