2013-03-19 27 views
1

所以,正則表達式一直是我存在的一段時間的禍根。我覺得我正在理解它的風口浪尖,但我感到非常沮喪。總之:我在RegEx表達式中缺少什麼?

我試圖通過PHP刮從以下網站數據:

http://magicseaweed.com/Asbury-Park-Surf-Report/857/

我想提取頁面頂部的大膽波高(目前,它讀3-5)。我明白爲什麼這個工程:

preg_match('/<div class="msw-fct-ccd msw-sr-details span3"> <h3> <span>(.*)  
<small>ft<\/small> <\/span> <div class="msw-fct-ccr msw-sr-rating">/', $pageMagic, 
$height); 

但我不明白爲什麼這會不會:

preg_match('/<div class="msw-fct-ccd msw-sr-details span3"> <h3> <span>(/d-/d)|(/d)  
<small>ft<\/small> <\/span> <div class="msw-fct-ccr msw-sr-rating">/', $pageMagic, 
$height); 

在我的腦海裏,按理來說,應該尋找一個數字,一個破折號,隨後另一個數字或只是一個數字。我在http://gskinner.com/RegExr/中測試了正則表達式,它拿起了3-5。先謝謝你!

+1

**不要使用正則表達式來解析HTML **。你不能用正則表達式可靠地解析HTML,你將面臨悲傷和挫折。只要HTML從你的期望改變,你的代碼就會被破壞。有關如何使用已經編寫,測試和調試的PHP模塊正確解析HTML的示例,請參閱http://htmlparsing.com/php。 – 2013-03-19 22:20:23

回答

2

你的斜線是錯誤的。它應該是:

(\d-\d)|(\d) 

順便說一句,您可以簡化這:

\d(-\d)? 

...但注意,這將改變捕獲組。我留下的修補程序作爲你的練習:)