用正则表达式解析网页源代码

时间:2011-07-24 05:54:05

标签: php regex html-parsing

我似乎无法弄清楚我需要的正则表达式来解析以下内容。

<div id="MustBeInThisId">
   <div class="ValueFromThisClass">
      The Value I need
   </div>
</div>

正如你所看到的,我有一个带有id的包装div。该div包含多个其他div,但只有一个div我需要来自的值。

4 个答案:

答案 0 :(得分:4)

如果您尝试从HTML文档中提取某些数据,则不应使用正则表达式。

相反,你应该使用DOM Parser:那些就是为此做的。


在PHP中,您可以使用 DOMDocument 类及其DOMDocument::loadHTML()方法来加载HTML内容。


然后,您可以使用以下方法:

您甚至可以使用DOMXpath对HTML内容执行XPath查询 - 这样您就可以搜索其中的任何内容。


在你的情况下,我认为像这样的事情应该可以解决问题。

首先,将您的HTML内容转换为字符串(或使用DOMDocument::loadHTMLFile()

$html = <<<HTML
<p>hello</p>
<div>
    <div id="MustBeInThisId">
    <div class="ValueFromThisClass">
        The Value I need
    </div>
    </div>
<div>
HTML;

然后,将其加载到DOMDocument实例:

$dom = new DOMDocument();
$dom->loadHTML($html);

Instanciate DOMXPath对象,并使用它来查询您的DOM对象:
我的XPath表达式可能比必要的复杂得多......我对这些表达方式并不是很好......

$xpath = new DOMXPath($dom);
$items = $xpath->query('//div[@id="MustBeInThisId"]/div[@class="ValueFromThisClass"]');

最后,使用该查询的结果:

if ($items->length > 0) {
    var_dump( trim( $items->item(0)->nodeValue ) );
}

这是你的结果:

string 'The Value I need' (length=16)

答案 1 :(得分:1)

使用像simplehtmldom这样的东西 - 它会让你的生活变得更加轻松。

$html = str_get_html($source_code);
$tag = $html->find("#MustBeInThisId .ValueFromThisClass", 0);
$the_value_i_need = $tag->innertext;

答案 2 :(得分:0)

正则表达式无法解析HTML,因为HTML不是常规语言。您应该使用DOMDocument

然后你得到了很好的功能,比如getElementById:)

答案 3 :(得分:0)

或者尝试像JQuery这样的javascript库。我认为这是你想要的最简单的方法。