[英]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.