2011-02-01 15 views
0

私は間違っていますか? 私はYouTubeのコードが必要ですが、実際の価値は返されません。PHP:YouTubeのURLからビデオIDを抽出

if(preg_match_all("http:\/\/www\.youtube\.com\/v\/(.*)(.*)", $row->n_texto, $matches){ 
    $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1][0]."/0.jpg"; 
} 

編集 - コメントに基づいてをircmaxell、テキスト内のリンク構造は次のとおりです。

ます。http:// www.youtube.com/v/plMvAh10HVg%26hl=en%26fs = 1%26rel = 0


更新

問題がある:私のコードは次のようにリンクを返します。

http://www.youtube.com/v/plMvAh10HVg%26hl=en%26fs=1%26rel=0 

私は正規表現でそれを止めることができる前に%26hl=en%26fs=1%26rel=0に表示されますか?

+0

あなたが提供したリンクは有効なリンクではありません。 urldecodeを指定しても有効なURLではない 'plMvAh10HVg&hl = en&fs = 1&rel = 0'になります(最初の'& 'ビットの前に'? 'が必要です)... – ircmaxell

+0

Can ' tのyoutubeのリンクを見る?v = blahも同様に?/v/blahのリンクだけを見ているなら、parse_urlを使ってパスを取得し、最初に/ vをドロップしてください。 –

答えて

1

正規表現が正しくありません。それにはいくつかの問題があります。さて、限り、あなたが望むものとして、この試してみてください。今

#http://(?:.*)youtube.com/v/([^/\#?]+)# 

を、なぜに関しては、のは、正規表現を見てみましょう:

http://(?:.*)youtube.com 

あなたはhttp://で始まる文字列を探しています、後に何かがある(www.ww2.、または何もない)。

URLの先頭には/v/があります。

([^/\\#?]+) 

あなたは別の/、クエリ文字列(?)またはアンカー(#)までの他のすべてを探しています。だからそれはあなたが探しているIDと一致する必要があります。あなたはすべて見つけたい場合

だから、それは

if(preg_match("#http://(?:.*)youtube.com/v/([^/\#?]+)#", $row->n_texto, $matches){ 
    $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1]."/0.jpg"; 
} 

次のようになります。

if(preg_match_all("#http://(?:.*)youtube.com/v/([^/\#?]+)#", $row->n_texto, $matches){ 
    foreach ($matches[1] as $match) { 
     $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$match."/0.jpg"; 
    } 
} 
+0

Strenge、それはメッセージを返す: – Klauzito

+0

@ user580463:それは私のためにうまくいく:http://regexcalc.net/ – ircmaxell

+0

問題は: 私のコードはこのようなリンクを返す:http://i1.ytimg.com/ vi/plMvAh10HVg%26hl = en%26fs = 1%26rel = 0 %26hl = en%26fs = 1%26rel = 0と表示される前にregexpで停止できますか? – Klauzito

-1
^http://\w{0,3}.?youtube+\.\w{2,3}/watch\?v=[\w-]{11} 

http://www.regexlib.com/REDetails.aspx?regexp_id=2569

+1

正規表現が見えます。なぜあなたは 'youtubeee.com'にマッチしますか? – ircmaxell

+1

作成していない正規表現を投稿する場合は、最初に完全にテストする必要があります。あなたがウェブ上で見つけることができる正規表現の大部分はやりとりであり、RegExLib上の正規表現も例外ではありません。 –

0

に応じて提供されるリンクは、ワット第一の前にスペースを持っていますwww.youtube.comで必要なコードは次のとおりです:

if(preg_match_all("%http://www\.youtube\.com/v/([\w]+)%i", $row->n_texto , $matches)){ 
    $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1][0]."/0.jpg"; 
} 

また、あなたが持っているURLはエンコードされていますので、使用する前にurldecode($ row-> n_texto)を使用してください。

関連する問題