簡體   English   中英

preg_replace正在替換所有內容

[英]preg_replace is replacing everything

我想用空字符串替換某些html標簽,並且只想檢索文本。 下面是我想要的示例。

preg_match_all("/<span id=\"priceblock_ourprice\" class=\"a-size-medium a-color-price\">(.*)<\/span>/U", $content, $matches);

上面的行檢索類似這樣的內容。

<span id="priceblock_ourprice" class="a-size-medium a-color-price">50</span>

現在,我只想檢索整數值(即50)。 我嘗試了以下語句來刪除HTML標記。

    foreach($matches[0] as $key=>$val) {
        $price = preg_replace( '/<(.*)>/', '', $val);
    }

但是問題是,它替換了所有內容,並返回了空字符串。 它應該返回50,沒有null。 輸出文件$ price變量應類似於:

$price = 50

嘗試在正則表達式中添加問號

foreach($matches[0] as $key=>$val) {
  $price = preg_replace( '/<(.*?)>/', '', $val);
}

這將具有查找第一個>而不是最后一個的效果。 正則表達式很貪婪,會找到所有可能的東西。

另外,請記住,您執行此操作的方式將用每個循環替換$ price。 我假設您在下一個循環發生之前用$ price做某事,但是如果沒有,則應該將價格存儲在數組中。

如果看起來比預期的用途更多? 進行非貪婪的比賽。 貪婪( .* )將消耗盡可能多的東西,而使其變得不貪婪( .*? )將防止這種情況的發生。

preg_replace('/<(.*?)>/', '', $val);

我也會考慮為此使用DOM ,下面是一個示例。

$content = <<<DATA
<span id="priceblock_ourprice" class="a-size-medium a-color-price">50</span>
<span id="priceblock_ourprice" class="a-size-medium a-color-price">40</span>
<span id="foo">30</span>
DATA;

$doc = new DOMDocument();
$doc->loadHTML($content); // Load your HTML content

$xpath = new DOMXPath($doc);
$vals = $xpath->query("//span[@id='priceblock_ourprice']");

foreach ($vals as $val) {
   echo $val->nodeValue . "\n";
}

產量

50
40

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM