2010-10-15 68 views
0

我工作的正則表達式查找文本的整個堆裏面如何使用PHP中的正則表達式解析此HTML?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

坐在那裏,說菜單的結束標記......它看起來像這樣:

<!--END MENU--> 

這是我編寫的代碼,但並未將匹配文字吐出:

$value = preg_match('/^<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd\">(.*?)<!--END MENU-->/',$content, $matching_text); 

echo $matching_text[0] 
+0

讀http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-標籤/ 1732454#1732454。 – Ms2ger 2010-10-16 17:33:56

回答

1

您無法可靠地使用正則表達式解析HTML。改爲使用HTML解析器。

2

儘管我通常會同意Andy,但您應該能夠在給定具體的開始和結束時解析HTML字符串的這部分。

如果沒有m修飾符,.(點)將不匹配換行符。把它扔到你的正則表達式模式的末尾,並給它一個鏡頭。

more details

1

首先,在你的正則表達式需要某些字符進行轉義,例如點。

其次,即使您當前的正則表達式工作,它也不會匹配很多HTML文檔,因爲您的要求太具體。

在我opninion,你應該使用這個表達式來代替:

/<!doctype\s*html\b[^><]+>(.*?)<!--\s*end\s+menu\s*-->/ism 
+1

+1注意OP的正則表達式的正確性。我仍然認爲即使你的需要'm'修飾符。 – 2010-10-15 12:44:56

+0

糟糕,謝謝@Jason爲了捕捉那個。 :-) – Vantomex 2010-10-15 13:24:28