Re: [請益] 擷取網頁內容與preg_match_all

看板PHP作者 (恨怨悲苦憎怒嗔)時間13年前 (2010/09/15 10:19), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
其實你的問題跟 preg_match_all 和 preg_match 沒有關係 跟用 echo 或是 print_r 也沒有關係 是你不知道 php "變數代換"的法則 變數代換法則在官網: http://0rz.tw/TOqvp ※ 引述《Slas (史雷斯)》之銘言: : 標題: [請益] 擷取網頁內容與preg_match_all : 時間: Wed Sep 15 00:38:12 2010 : : : 我要寫的功能大致上是,先抓取GOOGLE搜尋結果的頁面, : 然後將搜尋結果中第一頁中的結果的連結抓出來。 : : -- : 原始碼我原本是這樣寫: : : $url ="http://www.google.com.tw/search?hl=zh-TW&q=地震&meta=&aq=f&oq="; : $fp = file_get_contents($url); : : preg_match_all("/<h3 class=\"r\"><a href=\"(.+?)\" class=l>/", $fp, : $data,PREG_SET_ORDER); : : echo "網址:$data[0][1]"."\n"; : echo "網址:$data[1][1]"."\n"; : . : . : . : -- : 但是以上的輸出結果只會顯示: : : 網址:Array[1] : : 網址:Array[1] echo其實可以印出你想要的字串 只是你原本寫法 echo "網址:$data[0][1]"."\n"; php會把它看成 echo "網址:$data[0]"."[1]\n"; 它只會把變數解析到陣列的第一維 $data[0] 是什麼? 也是陣列 才會印出Array[1] 按照官網所述 你要在雙引號內用二維陣列 屬於 Complex syntax 所以你要這樣用 echo "網址:{$data[0][1]}"."\n"; : : -- : : 但如果我將原始碼改為: : $url ="http://www.google.com.tw/search?hl=zh-TW&q=地震&meta=&aq=f&oq="; : $fp = file_get_contents($url); : : preg_match("/<h3 class=\"r\"><a href=\"(.+?)\" class=l>/", $fp, $data); : : echo "$data[1]"."\n"; 在這裡 陣列的第一維可以被 php 變數代換正確解析 所以出現你要的正確結果 : -- : 則可以正確輸出一項結果: : : 網址:http://www.cwb.gov.tw/V6/seismic/quake_index.htm : -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.110.112.146

09/15 10:22, , 1F
所以我個人在有陣列存取時絕不會這樣寫...
09/15 10:22, 1F

09/15 13:01, , 2F
非常感謝,沒想到官網有這麼多例子可以看
09/15 13:01, 2F
文章代碼(AID): #1Ca2qiz2 (PHP)
文章代碼(AID): #1Ca2qiz2 (PHP)