作者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