【问题标题】:Regex: Stripping ID of Youtube video from URL正则表达式:从 URL 中剥离 Youtube 视频的 ID
【发布时间】:2012-07-20 06:36:47
【问题描述】:

我目前正在使用正则表达式代码来分隔 YT 视频 ID。我使用正则表达式的原因是 yt 视频 URL 有多种格式。我已经构建了一个正则表达式,它几乎可以检测除以下格式之外的几乎所有 YT url 格式的 ID。我试过修改它,但没有运气。有没有办法让正则表达式从下面的 URL 中删除 id?

http://www.youtube.com/watch?feature=v-feature&v=317a815FLWQ

正则表达式:

('~https?://(?:[0-9A-Z-]+\.)?(?:youtu\.be/| youtube\.com\S*[^\w\-\s])([\w\-]{11})(?=[^\w\-]|$)(?![?=&+%\w]*(?:[\'"][^<>]*>| </a>))[?=&+%\w]*~ix','http://www.youtube.com/watch?v=$1',$url);

【问题讨论】:

  • 使用您的语言的 URL 解析函数来读取查询字符串。

标签: regex youtube


【解决方案1】:

字符串操作怎么样?你会找到 "v=" 并开始阅读直到下一个 "&" 吗?这将为您提供视频 ID,您可以稍后轻松创建 URL

【讨论】:

    【解决方案2】:

    以下应该有效:

    (&|\?)v=(\w*)(&|$)
    

    它获取以&amp;? 开头的任何内容,然后是id,然后是下一个&amp; 或结尾。

    我不太了解 PHP,但我可以看到您正在尝试替换字符串。那不应该完全有效。我认为您应该做的是获取与以下内容的匹配并将其添加到字符串以构建您自己的 URL。

    preg_match('(&|\?)v=(\w*)(&|$)', $url, $matches);
    $res = 'http://www.youtube.com/watch?v=' + $matches[1]
    

    然后 $res 就会得到想要的 URL。

    【讨论】:

    • 谢谢,你能告诉我我可以在正则表达式的哪个部分添加吗?
    • 这就是获取 ID 所需的所有正则表达式。在这种情况下,ID 为 2 美元。
    • +1 谢谢,但如果想将 id 添加到我的格式化网址的末尾,如下所示:('(&amp;|\?)v=(\w*)(&amp;|$)','http://www.youtube.com/watch?v=$2',$url); 这是正确的吗?
    • 我对 PHP 了解不多,但我可以看出您正在尝试替换字符串。
    【解决方案3】:

    仅供参考,我使用此代码适用于我能够找到的所有变体:

        function getYouTubeId($url)
        {
            $pattern = '#^(?:https?://|//)?(?:www\.|m\.)?(?:youtu\.be/|youtube\.com/(?:embed/|v/|watch\?v=|watch\?.+&v=))([\w-]{11})(?![\w-])#';
            preg_match($pattern, $url, $matches);
            return (isset($matches[1])) ? $matches[1] : false;
        }
    

    使用这些变体进行测试:

    http://www.youtube.com/watch?v=-wtIMTCHWuI
    http://www.youtube.com/v/-wtIMTCHWuI?version=3&autohide=1
    http://youtu.be/-wtIMTCHWuI
    https://www.youtube.com/embed/-wtIMTCHWuI
    

    前阵子从this post找到函数。

    【讨论】:

      【解决方案4】:

      你为什么不直接

      $url = "http://www.youtube.com/watch?feature=v-feature&v=317a815FLWQ&hello=ok";
      $stop = strlen($url);
      $pos = strpos($url,'v=')+2;
      $x = strpos($url,'&',$pos);
      if($x)
          {
          $x = $x - $pos;
          $stop = $x;
          }
      $str = substr($url,$pos,$stop);
      echo $str;
      

      它基本上总是以 v= .... 开头。

      【讨论】:

      • 因为并非所有的 YouTube 网址变体都在视频 ID 前包含“v=”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2014-07-25
      • 2012-07-11
      相关资源
      最近更新 更多