我似乎无法弄清楚我需要的正则表达式来解析以下内容。
<div id="MustBeInThisId">
<div class="ValueFromThisClass">
The Value I need
</div>
</div>
正如你所看到的,我有一个带有id的包装div。该div包含多个其他div,但只有一个div我需要来自的值。
答案 0 :(得分:4)
如果您尝试从HTML文档中提取某些数据,则不应使用正则表达式。
相反,你应该使用DOM Parser:那些就是为此做的。
在PHP中,您可以使用 DOMDocument
类及其DOMDocument::loadHTML()
方法来加载HTML内容。
然后,您可以使用以下方法:
id
,,则DOMDocument::getElementById()
获取一个元素
DOMDocument::getElementsByTagName()
获取具有给定标记的所有元素。您甚至可以使用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库。我认为这是你想要的最简单的方法。