2015-08-22 49 views
0

我試圖從this page接收<tbody>標記的內容。preg_match_all不能使用html標記

只有一個表只有一個標籤<tbody>,我想從該表中獲取所有行

我試圖通過這種方式

$page = file_get_contents('http://pk.zntu.edu.ua/fakultety-ta-napryamy-pidhotovky/derzhavne-zamovlennya-2011-bakalavr'); 

preg_match_all("/<tbody>(.+?)<\/tbody>/is", $page, $output_array); 

var_dump($output_array); 

做到這一點,我得到空數組:

array(2) { [0]=> array(0) { } [1]=> array(0) { } } 

我曾嘗試的圖案不同的變體等

  • /<tbody>(.*?)<\/tbody>/is
  • /<tbody>.+?<\/tbody>/is
  • /<tbody>.*?<\/tbody>/is
  • /<tbody>.+<\/tbody>/is
  • /<tbody>.*<\/tbody>/is

但是,沒有一個工作

隨着PCRE和正則表達式庫中的所有應該沒問題

我不知道是什麼問題,請幫忙

+0

將「tbody」標籤的內容包含在問題中提取的源文件中。 – user2268997

+0

'/ ] *>(。*?)<\/tbody>/is' –

+0

「嘗試不同的變體」基本上只是猜測。 *編程時不要這樣做。這是一個可怕的方法。理解你想做什麼,將其分解成幾個步驟,理解語法的含義,然後弄清楚如何用語法表達你的意圖,最後對它進行測試。 –

回答

0

你的模式很簡單,上面的regex應該沒問題。但我認爲問題來自file_get_contents。我只是嘗試計數$page可變的行數和我得到這個

71220 

但後來,我通過點擊進入該網站查閱和複製源代碼的實際代碼手工算吧,它是關於1787線。

這是什麼意思?

這可能意味着您將其存儲在$page變量中的代碼與手動點擊該網站時看到的HTML代碼不同。實際上,當您打開一個網站時,可能會發生很多事情,例如偵聽器方法正在工作,但是如果您將這些源代碼直接下載到PHP變量,某些方法可能永遠不會執行,這會讓您獲得不完整的HTML代碼。

請注意,支持我的假設的另一個證據是,我甚至無法在您的$page變量中找到關鍵字tbody

-1

tbody標記也可能包含屬性。因此,您需要匹配這些屬性才能獲取tbody標籤的內容。

'/<tbody\b[^>]*>(.*?)<\/tbody>/is'