PHP:从 YouTube URL 中提取视频 ID

发布于 2024-10-15 07:20:45 字数 609 浏览 3 评论 0原文

我做错了什么吗? 我需要 youtube 代码,但它不会返回真正的值。

if(preg_match_all("http:\/\/www\.youtube\.com\/v\/(.*)(.*)", $row->n_texto, $matches){
    $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1][0]."/0.jpg";
}

编辑 - ircmaxell 根据评论,文本中的链接结构为:

http://www.youtube.com/v/plMvAh10HVg%26hl=en%26fs=1%26rel=0


更新

问题是:我的代码返回这样的链接:

http://www.youtube.com/v/plMvAh10HVg%26hl=en%26fs=1%26rel=0

我可以用以下命令停止它吗正则表达式之前出现%26hl=en%26fs=1%26rel=0

Do I do something wrong?
I need the youtube code, but it doesn't return the real value.

if(preg_match_all("http:\/\/www\.youtube\.com\/v\/(.*)(.*)", $row->n_texto, $matches){
    $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1][0]."/0.jpg";
}

Edit - ircmaxell Based on the comment, the link structure in the text is:

http:// www.youtube.com/v/plMvAh10HVg%26hl=en%26fs=1%26rel=0


Update

The problem is: my code return a link like this:

http://www.youtube.com/v/plMvAh10HVg%26hl=en%26fs=1%26rel=0

Can I stop it with regexp before appear %26hl=en%26fs=1%26rel=0?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

云淡月浅 2024-10-22 07:20:46
^http://\w{0,3}.?youtube+\.\w{2,3}/watch\?v=[\w-]{11}

根据 http://www.regexlib.com/REDetails.aspx?regexp_id=2569

^http://\w{0,3}.?youtube+\.\w{2,3}/watch\?v=[\w-]{11}

according to http://www.regexlib.com/REDetails.aspx?regexp_id=2569

め七分饶幸 2024-10-22 07:20:45

你的正则表达式不正确。它有很多问题。现在,就您想要的而言,尝试一下:

#http://(?:.*)youtube.com/v/([^/\#?]+)#

现在,至于为什么,让我们看看正则表达式:

http://(?:.*)youtube.com

您正在寻找一个以 http:// 开头的字符串,在 ( 之后有任何内容www.ww2. 或什么都没有)。

/v/

您正在寻找 /v/ 作为 URL 的开头。

([^/\\#?]+)

您正在寻找其他一切,直到另一个 /、查询字符串 (?) 或锚点 (#)。所以这应该与您要查找的 ID 相匹配。

所以,

if(preg_match("#http://(?:.*)youtube.com/v/([^/\#?]+)#", $row->n_texto, $matches){
    $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1]."/0.jpg";
}

如果你想找到全部:

if(preg_match_all("#http://(?:.*)youtube.com/v/([^/\#?]+)#", $row->n_texto, $matches){
    foreach ($matches[1] as $match) {
        $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$match."/0.jpg";
    }
} 

Your regex is not correct. There are more than a few things wrong with it. Now, as far as what you want, try this:

#http://(?:.*)youtube.com/v/([^/\#?]+)#

Now, as for why, let's look at the regex:

http://(?:.*)youtube.com

You're looking for a string that starts with http://, has anything after (www., ww2., or nothing).

/v/

You're looking for /v/ as the start of the URL.

([^/\\#?]+)

You're looking for everything else UP TO another /, a query string (?) or a anchor (#). So that should match the ID you're looking for.

So, it would be

if(preg_match("#http://(?:.*)youtube.com/v/([^/\#?]+)#", $row->n_texto, $matches){
    $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1]."/0.jpg";
}

If you wanted to find all:

if(preg_match_all("#http://(?:.*)youtube.com/v/([^/\#?]+)#", $row->n_texto, $matches){
    foreach ($matches[1] as $match) {
        $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$match."/0.jpg";
    }
} 
胡大本事 2024-10-22 07:20:45

提供的链接在 www.youtube.com 中的第一个 w 之前有一个空格,您需要的代码是:

if(preg_match_all("%http://www\.youtube\.com/v/([\w]+)%i", $row->n_texto , $matches)){
    $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1][0]."/0.jpg";
}

另外,您拥有的 url 已编码,您可能需要在使用它之前使用 urldecode($row->n_texto) 。

the link provided has a space before the 1st w in www.youtube.com, the code you need is :

if(preg_match_all("%http://www\.youtube\.com/v/([\w]+)%i", $row->n_texto , $matches)){
    $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1][0]."/0.jpg";
}

also, the url you have is encoded, you may want to use urldecode($row->n_texto) before using it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文