2011-02-10 73 views
1

我有這個字符串,可能包含一些我需要抓取的網址。例如,如果用戶執行:PHP字符串搜索 - 抓特定網址

www.youtube ...

www.vimeo ...

http://www.youtube ...

HttP://WwW.viMeo

我要抓住它(直到他找到一個空間也許)。並將其存儲在已創建的陣列上。

需要將vimeo鏈接與youtube鏈接分開,並將每個鏈接放在適當的視頻對象上。

我不確定這是否可能,我的意思是,如果來自瀏覽器的URL可以用於放置在預定義的視頻對象上。如果是這樣,那麼這就是要走的路(所以我相信)。

如果這一切都可行,我可以幫助您建立這樣的規則嗎?

在此先感謝

回答

5

這符合你需要的聯繫,並通過網站名稱他們在一個二維數組存儲:

$video_links = array(); 
if (preg_match_all("'(http://)?(www[.])?(youtube|vimeo)[^\s]+'is",$str,$n)) { 
    foreach ($n[3] as $key => $site) 
    { 
     $video_links[$site][] = $n[0][$key]; 
    } 
} 

這是什麼呢?

該匹配在$str分離3 + 1份所需的網址,這是您的字符串:

  • 部分0:全匹配(視頻鏈接)
  • 第1部分:http://(可選)
  • 第2部分:www.(可選)
  • 第3部分:vimeoyoutube

preg_match_all返回一個二維數組,上面的零件編號在第一級,每個匹配裏面是每個匹配的一部分。所以,你遍歷匹配($n[3])的第3部分,並在一個不錯的二維數組像這樣使用數組鍵引用部分0($n[0][$key]),並安排他們:

$video_links = array (
    'vimeo' => array (
     0 => 'vimeo link 1', 
     1 => 'vimeo link 2', 
     // ... 
    ), 
    'youtube' => array (
     0 => 'youtube link 1', 
     1 => 'youtube link 2', 
     // ... 
    ) 
); 
+0

謝謝。我有幾個問題,想知道你是否可以在這裏幫我一把。我們在哪裏使用$ str? 3的含義是什麼?爲什麼我們需要$ site ...我會閱讀有關preg_match_all的正確方法,但這些問題仍然適用 - 我能再次獲得您的幫助嗎?非常感謝。 – MEM 2011-02-10 15:18:30

+0

增加了一些解釋,希望你找到你的答案:) – aorcsik 2011-02-10 15:30:43

1

你應該做的是先更換的http://www.什麼也沒有,再在前面加上它放回到字符串的所有實例,這使得該字符串一致

str_replace(array("http://www.","http://"),"",$url); 
$url = "http://" . $url; 

那麼你可以使用parse_url檢查數據,像這樣

$Data = parse_url($url); 

然後只是相應地檢查你的值。

switch(strtolower($Data['host'])) 
{ 
    case "youtube.com": 
     // :) 
    break; 
    case "vimeo.com": 
     // :) 
    break; 
    case "something.tld": 
     // :) 
    break; 
} 

$Data轉儲將輸出類似這樣:

[scheme] => http 
[host] => youtube.com 
[user] => 
[pass] => 
[path] => /watch 
[query] => v=r8FVAHuQvjc&feature=topvideos 
[fragment] => 

你現在可以隨便去

$lastSegment = $Data["path"] . "?" . $Data["query"]; 

這將返回類似/watch?v=r8FVAHuQvjc&feature=topvideos

,如果你想從查詢個別項目,如視頻ID,那麼你可以去:

parse_str($Data["query"],$result); 
echo $result["v"]; 

這將只是輸出的視頻ID。