我正在使用正则表达式从以下HTML中提取右边的价格:
<p class="pricing ats-product-price"><em class="old_price">$99.99</em>$94.99</p>
在PHP中使用preg match:
preg_match_all('!<p class="pricing ats-product-price"><em class="old_price">.*?<\/em>(.*?)<\/p>!', $output, $prices);
除此之外,我注意到有时HTML并不包含旧价格。所以有时HTML看起来像这样:
<p class="pricing ats-product-price">$129.99</p>
似乎我的目标应该是从表达式中提取 last 价格,换句话说,就是在最后一个问号之后和</p>
之前直接跟随的文本。这种表达方式虽然超出了我的联盟 - 希望能在这里得到一些帮助。感谢。
答案 0 :(得分:1)
将正则表达式组合与解析器一起使用:
<?php
$data = <<<DATA
<p class="pricing ats-product-price">
<em class="old_price">$99.99</em>
$94.99
</p>
<p class="pricing ats-product-price">$129.99</p>
DATA;
# set up the dom
$dom = new DOMDocument();
$dom->loadHTML($data, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
# set up the xpath
$xpath = new DOMXPath($dom);
$regex = '~\$\d+[\d.]*\b\s*\Z~';
foreach ($xpath->query("//p") as $line) {
if (preg_match($regex, $line->nodeValue, $match)) {
echo $match[0] . "\n";
}
}
这会产生
$129.99
$129.99
<小时/> 该代码段会设置
DOM
,查询p
个代码并搜索其中的最后价格。