作者troy1005 (小新)
看板PHP
标题[请益] PHP切割远端网页原始码
时间Sun May 8 21:26:29 2011
询问的问题是我想切割这个网址:
http://tinyurl.com/6c6njg8
找出无名小站文章的网址出来 在原始码中的第一个内容是
http%3a//www.wretch.cc/blog/love52071835/1953378"
------------------以下是我的程式码------------------
$url = 目标网址
$fp = file_get_contents($url);
$url_count = preg_match_all
( '/http%3a\:\/\/www\.wretch\.cc\/blog\/(.*)\/(.*)/',$fp,$match);
$i=0;
while($i<10){
$title = $match[i];
echo "Title[$i]: $title </br>";
$i++;
}
这样执行结果一直都没有东西 想请问问题可能是出在哪里?
另外不太懂(.*)跟(.+?)的分别 希望可以大概说明一下 谢谢
有违反版规 麻烦请告知
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.255.175.82
1F:→ buganini:是*跟+的分别,和?的作用; 不是.*跟.+?的分别 05/08 21:30
2F:→ buganini:*跟+很容易 *就是{0,无限大} +就是{1,无限大} 05/08 21:31
3F:→ buganini:?的作用就要贪婪的match下去还是停在右边的也match到处 05/08 21:32
4F:→ troy1005:以上了解 感谢你 05/08 21:32
5F:→ buganini:(.*)> 会把abcd>abcd> 里面的abcd>abcd都吃进去 05/08 21:33
6F:→ buganini:(.*?)>就只会吃到abcd 05/08 21:33
7F:→ buganini:通常在parse html的时候很多写.*?的东西都可以改成 05/08 21:34
8F:→ buganini:[^>]*> 或是 [^"]*" 这样效能会好一点 05/08 21:34
想再请问 目前preg_match的问题 该如何解决呢?
改成 preg_match_all
( '/www\.wretch\.cc\/blog\/(.*?)\/(.*?)/',$fp,$match);
执行还是看到不到结果 会是RE方面的问题吗?
※ 编辑: troy1005 来自: 111.255.175.82 (05/08 21:46)
9F:→ buganini:确定里面都有写FQDN? 後面loop先用print_r()代替 05/08 23:13
10F:→ buganini:这种文字中很多/的pattern delimiter可以改用!之类的 05/08 23:13
11F:→ tka:也许用code.google.com/p/phpquery把url抓出来会比较简单 05/08 23:14
12F:→ buganini:就不用一直\/ 05/08 23:14