PHP正则表达式获取YouTube视频ID?
有人可以告诉我如何从URL中获取youtube id,而不管URL中有什么其他GET变量。
例如,使用此视频:
因此在下一个视频之间和之前http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related
v=
&
有人可以告诉我如何从URL中获取youtube id,而不管URL中有什么其他GET变量。
例如,使用此视频:
因此在下一个视频之间和之前http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related
v=
&
(你可以将正则表达式用于几乎任何事情,但它们很容易出错,所以如果有PHP函数专门用于你试图完成的事情,请使用它们。
parse_url获取一个字符串并将其切成一个包含一堆信息的数组。您可以使用此数组,也可以指定要作为第二个参数的一个项目。在本例中,我们对查询感兴趣,即 。PHP_URL_QUERY
现在我们有查询,它是 ,但我们只需要 之后的部分。为此,我们转向它基本上像在字符串上一样工作。它采用一个字符串并创建字符串中指定的变量。在这种情况下,将创建并创建。我们只对 感兴趣.v=C4kxS1ksqtw&feature=relate
v=
parse_str
GET
$v
$feature
$v
为了安全起见,您不希望只将 命名空间中的所有变量都存储在命名空间中(请参阅mellowsoon的注释)。相反,将变量存储为数组的元素,以便您可以控制要存储的变量,并且不会意外覆盖现有变量。parse_url
把所有东西放在一起,我们有:
<?php
$url = "http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=relate";
parse_str( parse_url( $url, PHP_URL_QUERY ), $my_array_of_vars );
echo $my_array_of_vars['v'];
// Output: C4kxS1ksqtw
?>
编辑:
呵呵- 谢谢查尔斯。这让我笑了起来,我以前从未见过Zawinski的引用:
有些人在遇到问题时会想'我知道,我会用正则表达式'现在他们有两个问题。
– 杰米·扎温斯基
preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", $url, $matches);
这将考虑
youtube.com/v/{vidid}
youtube.com/vi/{vidid}
youtube.com/?v={vidid}
youtube.com/?vi={vidid}
youtube.com/watch?v={vidid}
youtube.com/watch?vi={vidid}
youtu.be/{vidid}
我稍微改进了它以支持:http://www.youtube.com/v/5xADESocujo?feature=autoshare&version=3&autohide=1&autoplay=1
我现在使用的行是:
preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+(?=\?)|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", $link, $matches);