2011-03-12 54 views
0

我使用書籍Webbots,Spiders和Screen Scrapers的parse_array函數來解析我的需求。不過,我需要修改這個功能很少,我不知道該怎麼做。需要幫助修改一個函數(正則表達式)

功能:

function parse_array($string, $beg_tag, $close_tag) 
    { 
    preg_match_all("($beg_tag(.*)$close_tag)siU", $string, $matching_data); 
    return $matching_data[0]; 
    } 

工作原理:

$html="<div> 
      afterfirst 
      <div>nested</div> 
      this is lost 
      </div> 
      <div>div2</div>" ; 

    $div_array = parse_array($html,"<div", "</div>") ; 
    echo $div_array[0]. "</br>" ; 
    //outputs: 
    <div> 
    afterfirst 
    <div>nested</div> 
    //the line "this is lost" and the last </div> isn't included. 

基本上功能不能與嵌套標籤

可能的處理來改變功能,因此它能夠處理嵌套標籤?即不是停在下一個結束標記處,而是跟蹤任何其他嵌套標記並僅在正確結束標記後停止

任何幫助?

感謝

編輯:我知道正則表達式是不是reommended進行解析,並有PHP的DOM和simplehtmldom,但這解析陣列功能的偉大工程,如果只要它可以處理嵌套的標籤,這將是完善!所以任何幫助,將不勝感激。請給我一些提示,如果不是完整的解決方案,請。

+0

你走了,正則表達式解析糟糕。你不能只加載一個DOMDocument的HTML例如?另外,如果這是他們所宣傳的內容,請將本書裝入本書。 – Wrikken 2011-03-12 10:54:49

+1

這就是爲什麼我們不使用正則表達式來解析HTML。 – 2011-03-12 10:55:15

+0

這本書是相當神奇順便說一句。 – 2011-03-12 11:28:37

回答

0

有些人,當與 面臨的問題,認爲「我知道,我將使用 正則表達式。」現在他們有 兩個問題。

解決方案:

Simple DOM HTML Parser

+0

使用'A'分析器,其中這個_'simple'_我幾乎不是我的最愛:它與本地DOMDocument或其他XML函數相比速度極慢,獲得的收益非常小(如果您喜歡SDHP,只需編寫一個「DOMDocument」封裝器功能)。 – Wrikken 2011-03-12 10:59:18

1

編輯:我知道正則表達式是不是reommended 進行解析,並有PHP的DOM和 simplehtmldom,但這解析陣列 功能的偉大工程如果只有它 可以處理嵌套標籤,它會 完美!所以任何幫助這個 將不勝感激。給我 某種暗示,如果不是全解 請。

正則表達式不會計算和記錄類似的事情。嵌套標籤的這個問題正是爲什麼不推薦用正則表達式解析HTML的原因,因爲它很快變得不可能。解析器可能更有用,但它更可靠。

有一件事你可以嘗試,雖然這是在你的正則表達式結束時刪除U(非語義)標誌。 「不理解」意味着它會匹配第一個</div>標籤,而在默認的「貪婪」模式下,它會匹配最後一個標籤。這可能會或可能不適用於您的具體情況取決於您的HTML,但它至少值得一試。它不能解決嘗試一般用正則表達式來分析嵌套標籤的問題,所以如果這不起作用,你將不得不使用解析器。

+0

謝謝,我嘗試刪除U但現在匹配太多。猜我必須使用domdocument ... – 2011-03-12 11:20:08