Re: [請益] 思路請益 (關於正規表示,curl)

看板PHP作者 (做自己 好自在)時間15年前 (2010/02/24 11:25), 編輯推噓4(405)
留言9則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《kusoayan (Maybe)》之銘言: : 大家好 : 目前正在寫一隻小程式 : 功能是抓取無名網誌上播放器的音樂載點 : 而通常無名上是用iframe嵌入播放器 : http://tinyurl.com/ygsvmh2 : 其中 <iframe src=" 後的那段網址裡頭是真正要處理的code : 目前程式的流程是: : 用curl先抓取所給的url的html : 然後分析此html , 用preg_match 函式抓出 <iframe src=" 後的那段網址 : 而我用的正規表示式是 /iframe src=\"(.+?)\" frameborde/ : 再把這個網址用curl抓出原始碼 : 此時的code大約類似 : http://tinyurl.com/yk99ttk : 然後再用 /\?file=(.+?)&/ 把 file= 後面的這段抓下來 : 這個就是我所要的網址 : 以上用於我自己的無名都OK : 但是我用朋友得來測試時卻發現幾點致命傷 : 1.我的無名只有一個iframe : 可是不見得別人的也只有一個 : 也許有很多個 : 那這個時候該怎麼去抓播放器的語法呢 ? 該怎麼設定正規表示式的條件 ? : 或是有iframe的地方都抓出來 : 反正到第二步驟的時候"應該"只有播放器的那個iframe會有結果 : (算偷懶嗎XD) 用preg_match_all http://tw2.php.net/manual/en/function.preg-match-all.php preg_match_all("/\?file=(.*)&/",$content,$url); for($i=0; $i<count($url[1]); $i++){ echo $url[1][$i]; //去處理抓到的網址 } 至於為什麼是抓$url[1]裡面的東西 不是$url[0]的東西 可以參考文件try try看 : 2.抓取到播放器的code後 : 因為file,autostart等等是參數可以隨意變換位置 : 我的是file再最前面,所以連接下一個參數會用& : 以此作為正規表示式的規則 : 可是像我朋友的就很機車 file再最後面 : 所以載點之後並沒有 & : 這個時候規則又該怎麼改 ? 如果抓 /\?file=(.*)&/ count(count($url[1]))為0 則再抓 /&file=(.*)/ 依此類推 : 以上 : 因為我對正規表示式並沒有真正學習過 : 都是看著別人的code + google依樣畫葫蘆 : 所以現在遇到這個問題思路有點轉不出去 : 希望有高手能幫忙指點一下 : 謝謝 :D -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.21.158.139

02/24 22:25, , 1F
所以preg_match是抓了一個後就停止嗎 ?
02/24 22:25, 1F

02/24 22:36, , 2F
又 如果player中有兩首歌 即有兩個file
02/24 22:36, 2F

02/24 22:36, , 3F
aaa=1&bbb=2&file=xxxx " ....file=xxxx&
02/24 22:36, 3F

02/24 22:37, , 4F
那這樣他會從第一個file的開頭抓到第二個file的結尾嗎 ?
02/24 22:37, 4F

02/25 01:21, , 5F
如果第二個file也是&開頭 就會
02/25 01:21, 5F

02/25 19:46, , 6F
所以 /\?file=(.*)&/ 這種寫法有缺陷囉 ?
02/25 19:46, 6F

02/25 21:35, , 7F
.*?
02/25 21:35, 7F

02/25 23:17, , 8F
這可能要你自己分析一下 因為我沒去特別研究
02/25 23:17, 8F

02/25 23:18, , 9F
像你第三行說的那種 用/&file=(.*)/ 也會有缺陷
02/25 23:18, 9F
文章代碼(AID): #1BX9mhl- (PHP)
文章代碼(AID): #1BX9mhl- (PHP)