2014-07-07 139 views
-1

這是我的html字符串的一部分。正則表達式php html

<span class="price">£ 343</span> 
// Some html code 
<span class="price" id="old-price-22898">£ 343</span> 
</p><p class="special-price"> 
<span class="price" id="product-price-22898"> £ 274</span> 

我想要的是得到所有的價格。

所以,我想這個正則表達式:

<span class=\"price\"(.*)>(.*)<\/span> 

這對我來說很有意義,但我只用IDS得到<span>之間<span class="price">,而不是價格之間的價格。

任何幫助?

+1

最好不要用解析HTML正則表達式http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self -contained-tags/1732454#1732454 – user4035

+0

你應該制定出更好的問題標題。只在標題中添加幾個標籤對於進一步的使用沒有幫助。 – pduersteler

回答

0

正則表達式會低於<span class="price"> 標記和<span>標記捕獲標識和價格。

<span class=\".*?(?:(id=[^>]*))?>\s*([^<]*)\s* 

DEMO

+0

它不給我沒有id的跨度:/ – user3812188

+0

@ user3812188這個http://regex101.com/r/rM6tS5/3怎麼樣? –

+1

非常感謝! – user3812188

1

另外,您也可以使用DOMDocumentxpath。考慮下面這個例子:

$html_string = '<span class="price">£ 343</span><span class="price" id="old-price-22898">£ 343</span></p><p class="special-price"><span class="price" id="product-price-22898"> £ 274</span>'; 
$html_string = mb_convert_encoding($html_string, 'html-entities', 'utf-8'); 
$dom = new DOMDocument('1.0', 'UTF-8'); 
$dom->substituteEntities = TRUE; 
libxml_use_internal_errors(true); 
$dom->loadHTML($html_string); 
libxml_clear_errors(); 
$xpath = new DOMXpath($dom); 
$prices = array(); 
foreach($xpath->query('//*[@class="price"]') as $price) { 
    $prices[] = $price->nodeValue; 
} 

echo '<pre>'; 
print_r($prices); 

輸出:

Array 
(
    [0] => £ 343 
    [1] => £ 343 
    [2] => £ 274 
) 
+0

奇怪,爲什麼我的機器上的英鎊符號前打印此代碼?我使用的是Windows 7,php文件是使用utf8編碼的。 – user4035

+0

@ user4035我認爲這是一個關於編碼的問題,請檢查我的修訂 – user1978142

+0

現在能夠正常工作:) – user4035