2013-10-20 115 views
0

假設我有一個有效的htmlfile,我將其保存到一個字符串中。現在我想提取錨元素(hrefs)的鏈接。因此我想使用純正則表達式。如何使用PHP從HTML提取hrefs

preg_match_all('/<a [^>]*href="(.+)">/', $html, $match); 

通常我希望收到這樣的字符串:

http://www.thisIsAHrefLinkIWantToHave.de 

而是我還會收到以下字符串,邏輯的(+)在正則表達式造成的:

index?a=f">Link</a> &nbsp; <a href="index?a=ds">Link 2</a> &nbsp; <a href="index?b=b">Link 3</a> &nbsp; <a href="index?gf=d">Link 4</a> &nbsp; <a href="index?ttt=q">Link 5</a> &nbsp; <a href="index?g=my">Link 6</a> &nbsp; <a href="http://mysite.org 

我發現像Xpath或DOMDocument( PHP String Manipulation: Extract hrefs)的解決方案但我想有沒有這些/任何庫的解決方案,只是與正則表達式。我需要做什麼來解決我的正則表達式的問題?

我想過從第一個「到下一個」。但是,如何創建可以解決問題的模式或其他模式?

[編輯:]

preg_match_all('/<a [^>]*href="([A-Za-z0-9\/?=:&_.]+)?"/', $html, $match); 

回答

1

嘗試preg_match_all('/<a [^>]*href="(.+)?">/', $html, $match);,所述?使得.*非貪婪。

+0

謝謝!我試過了,但沒有任何區別。 – user2853437

+0

@ user2853437爲什麼不使用domdocument ??? – Musa

+0

原因我認爲這是一個沒有文檔的要求。這太容易了。 – user2853437