2012-12-04 81 views
0

我想要完成一些preg匹配。Preg匹配鏈接時出錯

我已經基本想出這個

preg_match_all('<a href="(.*?)">', $page, $result); 

但是這個輸出是

Array 
(
    [0] => Array 
    (
     [0] => a href="/stuff" 
     [1] => a href="/stuffstuffstuff" 

     and much more of this. 

我想刪除的href和斜線和報價,只保留內容。我試了很多,但這些東西不斷回來,任何幫助都會令人滿意。

謝謝你們

+0

'$ page'是什麼:整個頁面還是隻有原始HTML文件中的一行? –

回答

1

第一件事情,請不要嘗試解析HTML隨意用正則表達式,這是行不通的,這將打破,遲早的事。正則表達式不是解析html的工具,它不能正確解析它。 3個簡單的例子:

<a href='stuff'> (different quotes) 
<!-- <a href="stuff">--> 
<a style='something' href="stuff"> 

這些將打破你的申請。有無數的其他例子,這將不會工作,並會打破它!甚至Chuck Norris也不能正確解析html,NOONE可以!

但我相信你已經知道了,這是已知的HTML,它是不會在公衆場合公佈的只是簡單的小數量有限,所以讓我們回到你的問題:

preg_match_all預計,正則表達式帶有分隔字符,它匹配你在它們之間寫的所有東西。如果你寫

'<a href="(.*?)">' 

爲正則表達式,它會將「<」在開始時爲分隔字符,因此不匹配的。寫斜槓(或任何其他字符),以防萬一它:現在

preg_match_all('/<a href="(.*?)">/', $page, $result); 

,它會像匹配:

[0] => <a href="/stuff"> 

但你只想要「/東西」。 $ result給你一個數組。在$ result [0]中匹配所有正則表達式,在$ result [1]中匹配first(),在$ result [2]中匹配second()子表達式,等等......所以,你想要要查看$ result [1],你應該在那裏找到你想要的。