正则表达式不会正确解析HTML

时间:2017-03-31 23:55:10

标签: php html regex

我有一个字符串,想要使用正则表达式获取价格。

我的字符串:

<p class="price" itemprop="price" content="379.97">
 <span id="TFF-4517NA6G7-display-price">$379.97</span>
</p>

我的正则表达式:

preg_match('/\<p class=\"price\"(.?)\>(.*)\<\/p\>/', $str, $data);

不工作。我的错误在哪里? 感谢。

1 个答案:

答案 0 :(得分:2)

Never使用正则表达式解析HTML。改为使用DOM和/或XPath方法:

<?php
$html = <<< 'HTML'
<p class="price" itemprop="price" content="379.97">
 <span id="TFF-4517NA6G7-display-price">$379.97</span>
</p>
HTML;

$dom = new DomDocument();
$dom->loadHTML($html);
$xpath = new DomXPath($dom);
$nodes = $xpath->query("//p[@class='price']/@content");
foreach ($nodes as $node) {
    echo "$node->textContent\n";
}

我们在这里使用matching attribute value搜索<p>元素,然后获取其他属性的内容。