2012-02-25 22 views
0

このiframeコードのvimeo IDを取得する必要があります。これは私の文字列です。preg_matchのPHP正規表現

$str = '<iframe src="http://player.vimeo.com/video/34134823?title=0&amp;byline=0" width="900" height="506" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>' 

私はインデックスを使用することはできませんので、IDの一部34134823が8文字以上以下とすることができると信じています。
私は2回の爆発、http://player.vimeo.com/video/用と?疑問符よりも1でそれを行うことができますが、私はそれだけで私はそれでのnoob午前、正規表現を持つ方が良いだろうと確信しています。..

答えて

1
<?php 
$str = '<iframe src="http://player.vimeo.com/video/34134823?title=0&amp;byline=0" width="900" height="506" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'; 

$stat = preg_match('/.*video\/(\d{1,})\?title.*/', $str, $matches); 

print_r($matches); 
+1

なぜ '{1、}'ですか? '+'と書かれた複雑な方法... –

+0

真。真実。最初に心に来たこと: – JTP

+1

私はまた、 'title'部分を削除し、varsがarroundに置き換えられた場合に安全でなければならない'? 'を残しておきます。 – FFish

2

を使用しないのはなぜ2人は爆発する?確かに、あなたは正規表現でそれを行うことができます。しかし、URLが定義されている方法を考えれば、まず最初に?の後のすべてを削除し、残りの最後の/の前のすべてを削除します。

いくつかは、ここでregexpはエレガント考える(実際には、私もそれを自分自身を使用している場合があります)が、strposstrrposは、ここで同じように高速で信頼性の高いです。先端に感謝よりもOK

$end = strpos($test, "?") - 1; 
$sta = strrpos(substr($test, 0, $end), "/") + 1; 
$ret = substr($test, $sta, $end); 
+0

。 diffとは何ですか? '' strrpos'の '' strrpos'は '' explode'の上にありますか? – FFish

+1

http://php.net/manual/en/function.explode.php、http://php.net/manual/en/function.strpos.phpおよびhttp://php.net/manual/en/function .strrpos.phpはこれをあなたに伝えるのが大好きです。 – Anton

+1

'explode'は実際にはラインの単一の部分だけに興味があるときにはより高価です。 '?'を見つけるために 'strpos'を使い、最後の'/'を見つける' strrpos'、必要な文字を正確に得る 'substr'を使います。シンプルで効率的。 –

1
$pattern = '/\<iframe\s+.*src\=\"?[^\"]*player\.vimeo\.com\/video\/([\d]{5,})\??.*\".*\<\/iframe\>/i'; 

if(preg_match($pattern, $iframe_tag, $result)){ 
    $vimeo_id = $result[1]; 
}