[請益] PHP切割遠端網頁原始碼

看板PHP作者 (小新)時間14年前 (2011/05/08 21:26), 編輯推噓0(0012)
留言12則, 3人參與, 最新討論串1/2 (看更多)
詢問的問題是我想切割這個網址: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

05/08 21:30, , 1F
是*跟+的分別,和?的作用; 不是.*跟.+?的分別
05/08 21:30, 1F

05/08 21:31, , 2F
*跟+很容易 *就是{0,無限大} +就是{1,無限大}
05/08 21:31, 2F

05/08 21:32, , 3F
?的作用就要貪婪的match下去還是停在右邊的也match到處
05/08 21:32, 3F

05/08 21:32, , 4F
以上了解 感謝你
05/08 21:32, 4F

05/08 21:33, , 5F
(.*)> 會把abcd>abcd> 裡面的abcd>abcd都吃進去
05/08 21:33, 5F

05/08 21:33, , 6F
(.*?)>就只會吃到abcd
05/08 21:33, 6F

05/08 21:34, , 7F
通常在parse html的時候很多寫.*?的東西都可以改成
05/08 21:34, 7F

05/08 21:34, , 8F
[^>]*> 或是 [^"]*" 這樣效能會好一點
05/08 21:34, 8F
想再請問 目前preg_match的問題 該如何解決呢? 改成 preg_match_all ( '/www\.wretch\.cc\/blog\/(.*?)\/(.*?)/',$fp,$match); 執行還是看到不到結果 會是RE方面的問題嗎? ※ 編輯: troy1005 來自: 111.255.175.82 (05/08 21:46)

05/08 23:13, , 9F
確定裡面都有寫FQDN? 後面loop先用print_r()代替
05/08 23:13, 9F

05/08 23:13, , 10F
這種文字中很多/的pattern delimiter可以改用!之類的
05/08 23:13, 10F

05/08 23:14, , 11F
也許用code.google.com/p/phpquery把url抓出來會比較簡單
05/08 23:14, 11F

05/08 23:14, , 12F
就不用一直\/
05/08 23:14, 12F
文章代碼(AID): #1Dnfe7G2 (PHP)
文章代碼(AID): #1Dnfe7G2 (PHP)