2011-01-17 8 views
0

まず、関連する質問がたくさんあることを知りたいと思いますが、これらのトピックで解答を試みた後、私は"www.youtube/user/" -typeのURLを使ってyoutube vidを抽出するRegex

http://www.youtube.com/user/thedailyenglishshow#p/u/0/B3-Bn4aUXTY

私のPHPコードやパターンのような外観を使用:それでも私は、URLのこの特定のタイプからユーチ​​ューブのVIDを抽出するための正規表現が必要私のコードは動作しません何か..

を持っていますこれは:

public function retrieveUserVideo($data) { 

    $url = $data; 
    $pattern = '/[^\/]+$/'; 
    //$pattern = '(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+'; 
    preg_match($pattern, $url, $matches); 
    $result = $matches[1]; 

    return $result; 
} 

私はこれらのパターンを 'http://gskinner.com/RegExr/'でチェックしていますが、動作するようですが、最初のパターンで空の結果文字列を受け取り、2番目のパターンでは未知の修飾語を取得します'['エラー。私が '#'の間にパターンを置くと、空の文字列の結果が得られます。

表示されているコードに間違いがありますか?私を助けてください、私は本当に必死です!

+0

問題は、正規表現で "()"をキャプチャしていないという問題でした。この質問への答えはあなたを助けるかもしれない –

+0

を動作するはずスティーブンの答え... http://stackoverflow.com/questions/2936467/parse-youtube-video-id-using-preg-match/6382259#6382259 – Benjam

答えて

1

パターンの周りにPHP正規表現の区切り文字が必要なので、エラーが発生している可能性があります。しかし、まずあなたの解析要件は何ですか?ビデオIDを取得するだけの場合は、最後のスラッシュの後にすべての文字をキャプチャするのはなぜですか?たとえば、/\/([^\/]*)$/は、$matches[1]の場合はB3-Bn4aUXTYを返します。

+0

セキュリティ上の目的でURL全体を解析する必要がありましたが、パターンがうまくいれば、データをこの関数に渡す前に、それがYouTube URLであることを確認します。本当にシンプルなソリューションは非常に助けてくれてありがとう! – Iker

+0

あなたはどんなセキュリティの目的について話していますか?あなたがする必要があるのは、ビデオIDを取得することだけで、IDに表示されるすべての文字のセットを判断できれば、あなたは '/ \ /([ - A-Za-z0-9] *)$/'。確かに間違いがあるかもしれませんが、危険なデータに身をさらしてはいけません。 –

1

最後の部分を得るために単純なexplodeはどうなりますか?

public function retrieveUserVideo($data) { 
    $parts = explode('/', $data); 
    return end($parts); 
} 
+0

'$ parts [0]'は最後の部分ではなく最初の部分を返します –

+0

Yikes!ちょうど愚かな間違いを修正しました:P – scoffey

+0

+1今____________ –

関連する問題