如何使用preg_match()
找到此div的内容?
可以找到指向我页面的链接here。
我想获得此页面的产品价值。我做了这样的事,但我什么也得不到:
if (!preg_match("<div id=\"productPrice\">(.*)<\/div>/si", $data, $dealer_price))
return;
我也在尝试以下方法:
if (!preg_match("<div class=\"price\">(.*)<\/div>/si", $data, $dealer_price))
return;
提前感谢您的帮助。
答案 0 :(得分:5)
您的正则表达式无法正常工作的原因有几个。
@id
属性后面有一个属性。*
是greedy运算符,您应该使用*?
返回非贪婪的匹配。 修复正则表达式:
preg_match('~<div id="productPrice"[^>]*>(.*?)</div>~si', $data, $dealer_price);
echo trim($dealer_price[1]); //=> "$249.95"
使用DOM
从数据中获取产品值,而不是正则表达式。
$doc = new DOMDocument;
$doc->loadHTML($data);
$xpath = new DOMXPath($doc);
$node = $xpath->query("//div[@id='productPrice']")->item(0);
echo trim($node->nodeValue); //=> "$249.95"
答案 1 :(得分:0)
preg
中的正则表达式需要包含在分隔符中,例如~
或/
等。此外,您需要在表达式中使用延迟匹配:
preg_match( "@<div id=\"productPrice\">(.*)</div>@siU", $data, $dealer_price )
答案 2 :(得分:0)
<?php
$data = '<body><div id="productPrice">12.20</div></body>';
if(!preg_match('/<div id="productPrice">(.*)<\/div>/si', $data, $dealer_price)) return;
$dealer_price = $dealer_price[0];
echo $dealer_price;
?>
希望这会有所帮助..