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