作者lausai (恨怨悲苦憎怒嗔)
看板PHP
標題Re: [請益] 擷取網頁內容與preg_match_all
時間Wed Sep 15 10:19:07 2010
其實你的問題跟 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
1F:推 LPH66:所以我個人在有陣列存取時絕不會這樣寫... 09/15 10:22
2F:推 Slas:非常感謝,沒想到官網有這麼多例子可以看 09/15 13:01