首页 > 后端开发 > php教程 > 如何使用正则表达式从文本中提取 YouTube 视频 ID?

如何使用正则表达式从文本中提取 YouTube 视频 ID?

Mary-Kate Olsen
发布: 2024-12-16 19:19:12
原创
707 人浏览过

How Can I Extract YouTube Video IDs from Text Using Regular Expressions?

使用正则表达式从文本中查找 YouTube 视频 ID

您的目标是识别所有 YouTube 视频 URL 并从文本中检索其相应的 ID场地。正则表达式为完成此任务提供了强大的工具。

了解 YouTube 网址格式

YouTube 网址有多种形式,包括:

  • 短格式:https://youtu.be/NLqAF9hrVbY
  • 嵌入iframe:https://www.youtube.com/embed/NLqAF9hrVbY
  • 观看页面:https://www.youtube.com/watch?v=NLqAF9hrVbY

用于 YouTube 视频 ID 提取的正则表达式

下面是匹配所有内容的正则表达式这些格式并捕获 YouTube 视频 ID:

https?://(?:[0-9A-Z-]+\.)?(?:youtu\.be/|youtube(?:-nocookie)?\.com\S*?[^\w\s-])([\w-]{11})(?=[^\w-]|$)(?![?=&amp;+%\w.-]*(?:['"][^<>]*>|</a>))[?=&amp;+%\w.-]*
登录后复制

正则表达式说明

  • https?://:匹配方案URL 的一部分(HTTP 或HTTPS).
  • (?:[0-9A-Z-] .)?:可选子域部分(例如, www.).
  • (?:youtu.be/|youtube(?:-nocookie)?.comS*?1) :与 YouTube 主机部分匹配。它可以处理多个子域和格式。
  • ([w-]{11}):捕获 YouTube 视频 ID,该 ID 恰好由 11 个字母数字字符组成,并且连字符。
  • (?=2|$):断言 ID 后的下一个字符是非单词字符或字符串末尾。
  • (?![?=& %w.-](?:['"]3>|))[?=& %w.-] *:否定前瞻以排除预链接URL。

示例代码

在 PHP 中,您可以使用以下函数将视频 URL 替换为链接:

function linkifyYouTubeURLs($text) {
    $text = preg_replace('~(?#!js YouTubeId Rev:20160125_1800)
        # Match non-linked youtube URL in the wild. (Rev:20130823)
        https?://          # Required scheme. Either http or https.
        (?:[0-9A-Z-]+\.)?  # Optional subdomain.
        (?:                # Group host alternatives.
          youtu\.be/       # Either youtu.be,
        | youtube          # or youtube.com or
          (?:-nocookie)?   # youtube-nocookie.com
          \.com            # followed by
          \S*?             # Allow anything up to VIDEO_ID,
          [^\w\s-]         # but char before ID is non-ID char.
        )                  # End host alternatives.
        ([\w-]{11})        # : VIDEO_ID is exactly 11 chars.
        (?=[^\w-]|$)       # Assert next char is non-ID or EOS.
        (?!                # Assert URL is not pre-linked.
          [?=&amp;+%\w.-]*     # Allow URL (query) remainder.
          (?:              # Group pre-linked alternatives.
            [\'"][^<>]*>   # Either inside a start tag,
          | </a>           # or inside <a> element text contents.
          )                # End recognized pre-linked alts.
        )                  # End negative lookahead assertion.
        [?=&amp;+%\w.-]*       # Consume any URL (query) remainder.
        ~ix', '<a href="http://www.youtube.com/watch?v=">YouTube link: </a>',
        $text);
    return $text;
}
登录后复制

在 JavaScript 中,以下代码执行类似的操作操作:

function linkifyYouTubeURLs(text) {
    var re = /https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube(?:-nocookie)?\.com\S*?[^\w\s-])([\w-]{11})(?=[^\w-]|$)(?![?=&amp;+%\w.-]*(?:['"][^<>]*>|</a>))[?=&amp;+%\w.-]*/ig;
    return text.replace(re, '<a href="http://www.youtube.com/watch?v=">YouTube link: </a>');
}
登录后复制

  1. ws-
  2. w-
  3. <>

以上是如何使用正则表达式从文本中提取 YouTube 视频 ID?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板