2013-11-05 44 views
0

只是爲了好玩,我試圖編寫一些代碼來掃描YouTube網址的網站並保存它們。 URL不在標籤內,所以我需要使用正則表達式。我有這個部分。但我如何去迴應數組中的URL呢?如何使用正則表達式來抓取網址,然後從網站回顯網址?

我有什麼至今:

<?php 

$website = file_get_contents('http://boards.4chan.org/mu/res/41283979'); 
$reg_exURL = "/(?:https?://)?(?:www\.)?youtu(?:be\.com/watch\?(?:.*?&(?:amp;)?)?v=|\.be/)([\w‌​\-]+)(?:&(?:amp;)?[\w\?=]*)?/"; 

if(preg_match($reg_exURL, $website, $urls)) { 
    // Echo all values in the array 
    foreach ($urls as $url) { 
     echo $url; 
    } 
} else { 
    echo "No URLs Found."; 
} 

?> 

但是,當我回聲$網址,我剛剛得到了這個詞「陣列」。我想查看所有網址,最好每行都有一個。

+0

的可能重複[如何從頁面的所有URL(PHP)(http://stackoverflow.com/questions/1128774/how-to-get-all-urls-from-page-php) –

回答

1

通知4chan的增加如何在YouTube上的ID <wbr>標籤,可能是因爲對這樣的事情安全。您必須先使用替換從源代碼中移除這些標籤。

然後,您可以使用正則表達式來匹配源中的所有鏈接,請記住,youtube視頻ID由字母,數字,_組成,並且始終爲11個字符。

$website = str_replace("<wbr>","",file_get_contents('http://boards.4chan.org/mu/res/41283979')); 

$regex = "/(https?:\/\/)?(?:www\.)?youtube\.com\/watch\?v=[A-Za-z0-9_-]{11}/"; 
preg_match_all($regex , $website, $urls, PREG_SET_ORDER); 

foreach ($urls as $url) 
    echo $url[0] . "<br>"; 
+0

我不得不用「\ n」替換你的「
」,但是這個工作很完美,正是我想要的。它似乎比其他答案更加緊湊。 – Jason

0

你可以只使用print_r($url)var_dump($url)。這些是打印數組的標準方法。

0

您可以使用foreach循環來完成此操作。

<?php 

$website = file_get_contents('http://boards.4chan.org/mu/res/41283979'); 
$reg_exURL = "/(?:https?:\/\/)?(?:www\.)?youtu(?:be\.com\/watch\?(?:.*?&(?:amp;)?)?v=|\.be\/)([\w‌​\-]+)(?:&(?:amp;)?[\w\?=]*)?/"; 
if(preg_match($reg_exURL, $website, $urls)) { 
    // Echo all values in the array 
    foreach ($urls as $url) { 
     echo $url; 
    } 
} else { 
    echo "No URLs Found."; 
} 

?> 
+0

我更新了原始帖子並進行了修改,但我仍然沒有獲得任何地方。如果有幫助,我添加了我想要刮掉的網址。 – Jason

+0

我以前沒有注意到,但它看起來像在正則表達式中有錯誤。正斜線需要逃脫。我已經用工作示例更新了答案。 – Casey

+0

由於某種原因,回顯的URL是http://www.youtube.com/watch?v=lHjNlHjN,應該回顯「http://www.youtube.com/watch?v=lHjNmyzrVvM」 。另外,您是否知道如何在頁面上回顯剩餘的網址?我很抱歉聽起來很無知。 – Jason