正则表达式php - 使用特定ID在div中查找值

时间:2014-08-12 18:54:59

标签: php regex html-parsing

如何使用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;

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

您的正则表达式无法正常工作的原因有几个。

  1. 您在表达式的开头不提供分隔符。
  2. div @id属性后面有一个属性。
  3. *greedy运算符,您应该使用*?返回非贪婪的匹配。
  4. 如果您需要返回捕获组所需的值。
  5. 修复正则表达式:

    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;
?>                  

希望这会有所帮助..