PHPの正規表現パターンマッチについてお願いします


PHP4で下記のようなYouTubeのURLから、
ビデオID「ECZWIiFO11k」の部分だけを抽出する方法を教えてください。

対象のURLパターンは例のような3つのドメインのパターンと、
それぞれのビデオIDの後に余計なパラメーターが&から続く場合もあります。

<例>
1)http://www.youtube.com/watch?v=ECZWIiFO11k
2)http://jp.youtube.com/watch?v=ECZWIiFO11k
3)http://youtube.com/watch?v=ECZWIiFO11k
4)http://youtube.com/watch?v=ECZWIiFO11k&mode=related&search=

具体的なコードでご教授をよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2007/10/05 05:07:37
  • 終了:2007/10/06 14:28:15

回答(3件)

id:GEN111 No.1

GEN111回答回数472ベストアンサー獲得回数582007/10/05 08:02:01

ポイント27pt

こんな感じでしょうか。

$url = array(
'http://www.youtube.com/watch?v=ECZWIiFO11k',
'http://jp.youtube.com/watch?v=ECZWIiFO11k',
'http://youtube.com/watch?v=ECZWIiFO11k',
'http://youtube.com/watch?v=ECZWIiFO11k&mode=related&search=') ;

foreach ($url as $one) {
  $id = preg_replace('/.*v=([\d\w]+).*/', '$1', $one) ;
  echo $id."<br />\n" ;
}
id:urawareds

ありがとうございます

説明が足りなかったみたいです、ごめんなさい。

複数のURLから探す方法ではなくて、

4つの例のようなパターンのうち、

どれか一個だけが$urlに入って

リクエストがとんでくるので

そこからビデオIDを抜き出す方法をもとめています。

よろしくお願いします。

2007/10/05 08:14:59
id:GEN111 No.2

GEN111回答回数472ベストアンサー獲得回数582007/10/05 08:35:36

ポイント17pt

例示のパターン全てを満たすことを示すために配列にしただけなので、

$id = preg_replace('/.*v=([\d\w]+).*/', '$1', $one) ;

ここだけ使ってください。

id:iww No.3

いわわ回答回数101ベストアンサー獲得回数102007/10/05 11:28:12

ポイント36pt
$n = preg_match("/v=(\w*)/","http://youtube.com/watch?v=ECZWIiFO11k&mode=related&search=",$matches);

$n==1のとき、$matches[1]にビデオIDが入ります。

  • id:tyoro1210
    実際のyoutubeの動画IDは英数字以外の文字も含むので\wだけでは取れないと思う。
    後、\wは数字も含むので[\w\d]の\d蛇足。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません