0

YouTubeビデオIDを取得するために、この正規表現パターンがあります

preg_match_all( '/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i', $string, $res );

ただし、次の例の文字列では正しく機能しないようです。

<?php

$string = "yet, another youtube video.

[url=http://www.youtube.com/watch?feature=player_embedded&v=6kVpM5WK5JI#]http://www.youtube.com/watch?feature=player_embedded&v=6kVpM5WK5JI#[/url]


Fonte:onothersite";

preg_match_all( '/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i', $string, $res );

print_r($res);

?>

上記のコードはこれを出力します:

Array (
  [0] =>
    Array (
      [0] => youtube.com/watch?feature=player_embedded&v=6kVpM5WK5JI#]http://www.youtube.com/watch?feature=player_embedded&v=6kVpM5WK5JI#[/url] Font
    )
  [1] => 
    Array ( 
      [0] => url] Font
    )
)

そして、これを出力する必要があります:

Array (
  [0] =>
    Array (
      [0] => youtube.com/watch?v=6kVpM5WK5JI
    )
  [1] => 
    Array ( 
      [0] => 6kVpM5WK5JI 
    )
)

これを解決する方法はありますか?

ありがとう。

4

1 に答える 1

1

.+やのような貪欲なパターンに注意して.*ください。[^\/]+それぞれとに置き換えたところ、[^#]*うまくいくようです。

これ

preg_match_all( '/(?:youtube\.com\/(?:[^\/]+\/[^\/]+\/|(?:v|e(?:mbed)?)\/|[^#]*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i', $string, $res );

与える

Array ( 
    [0] => Array ( 
        [0] => youtube.com/watch?feature=player_embedded&v=6kVpM5WK5JI 
        [1] => youtube.com/watch?feature=player_embedded&v=6kVpM5WK5JI 
        ) 
    [1] => Array ( 
        [0] => 6kVpM5WK5JI 
        [1] => 6kVpM5WK5JI 
        ) 
    ) 

2 番目の貪欲なパターンを削除するように更新されました。

于 2012-12-11T20:13:38.080 に答える