2012-05-19 62 views
1

這是在本地工作的代碼。preg_match,只適用於本地

$str = <<<SSS 
    <H1 class="prodname">Alison Raffaele Reality Base</H1>Foundation, Skintone 1 - Fairest&nbsp;1 fl oz (30 m)<p class="tip"><table id="TblProdForkSellCopy" width="100%" border="0"><tr><td class="contenttd"><p>Get full, flawless coverage with this luxurious oil-free formula. Continually refreshes and re-hydrates your skin for 12+ hours - and guards against premature aging by deflecting damaging free radicals. </p></td></tr></table><p></p> 
SSS; 

preg_match("~</[hH]1>(.+?)<p~",$str,$name) ; 
var_dump($name) ; 

但是在頁面被實際解析時不起作用。爲什麼?鏈接到page。 我的代碼有什麼問題嗎?我有複製粘貼完全從頁面。 哦,並沒有工作我的意思是它匹配得太多。當本地匹配時,第一個'<p'不包括在內,但是在我的實際腳本中(當網頁從網上下載時),它包含'<p'標籤。

感謝

+1

「但是當頁面被實際解析時不起作用」<你到底意味着什麼?解析? – yankee

+0

我的意思是當我試圖用正則表達式解析它。用curl抓取頁面>製作簡單的html dom doc>用正則表達式解析它。 –

+0

請避免使用正則表達式解析HTML,因爲它會[驅動你瘋狂](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 )。改爲使用[HTML解析器](http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php)。 –

回答

2

試試這個:

/<h1[^>]*>([^<]+)/i 

它不工作,因爲你要關閉標籤忽略HTML標籤的屬性。 請參閱[^>]*它將匹配所有之前(屬性)>,作爲class="prodname"示例的一部分。 查看i的標誌。不會區分的情況。可以匹配hH

相關問題