2013-02-06 102 views
0

我需要獲取html標記之間的名稱。html標記之間的preg_match

<div class="from"><span class="profile fn">firstnamed familyname</span></div> 

到目前爲止,我按照同樣的問題,從其他永世例子嘗試:

preg_match(";from"><span class="profile fn>(.?)</span></div>;", $text, $match) 

,但它不工作。

什麼是正確的方法?

非常感謝。

+1

解釋「它不起作用」。 –

+0

你應該嘗試使用'DOMDocument'解析HTML而不是正則表達式:http://stackoverflow.com/questions/2571232/parse-html-with-phps-html-domdocument – hsan

+0

你沒有逃過preg_match調用中的引號。 –

回答

1
preg_match(";from"><span class="profile fn>(.?)</span></div>;", $text, $match) 

...應該觸發這個:

Parse error: syntax error, unexpected '<'

除了:

  • 您尋求一個未關閉屬性,它不是在原文:

    class="profile fn VS class="profile fn"

  • 您尋求零個或一個字符:

    .?

固定的正則表達式是:

$text = '<div class="from"><span class="profile fn">firstnamed familyname</span></div>'; 
preg_match(';from"><span class="profile fn">(.*)</span></div>;', $text, $match); 
var_dump($match); 

當然,這將在較大的HTML文檔可能突破(只要有另一個</span></div>位以後)。用於解析HTML時,正則表達式不可能正確。

+0

謝謝。現在它的工作。 – BenB

0

此:

preg_match(";from"><span class="profile fn>(.?)</span></div>;", $text, $match) 

語法不正確,你必須轉義雙引號:

preg_match(";from\"><span class=\"profile fn>(.?)</span></div>;", $text, $match) 
+0

謝謝。 ÁlvaroG. Vicario編寫的代碼沒有脫離雙引號。 – BenB

0

你需要轉義特殊charcters(如引號):

preg_match(";from\"><span class\=\"profile fn>(.?)</span></div>;", $text, $match)