2

我需要从一些看起来像这样的 youtube url 中获取一个字符串:

http://www.youtube.com/embed/WJlfVjGt6Hg?list=EC1512BD72E7C9FFCA&hl=en_US

我需要获取“../embed/”和“?list=..”(-> WJlfVjGt6Hg)之间的变量。

其他 youtube 网址的代码如下所示:

// Checks for YouTube iframe, the new standard since at least 2011
if ( !isset( $matches[1] ) ) {
    preg_match( '#https?://www\.youtube(?:\-nocookie)?\.com/embed/([A-Za-z0-9\-_]+)#', $markup, $matches );}

我怎样才能做到这一点 ?

4

3 回答 3

3

它是来自您的 url 的路径的基本名称:

$url = 'http://www.youtube.com/embed/WJlfVjGt6Hg?list=EC1512BD72E7C9FFCA&hl=en_US';
echo basename(parse_url($url, PHP_URL_PATH));
// WJlfVjGt6Hg
于 2012-12-17T04:14:16.077 回答
1

不要使用正则表达式。并非所有涉及字符串的问题都最好用正则表达式解决。

使用parse_url()PHP 内置的函数为您分解各个部分。

http://php.net/manual/en/function.parse-url.php是它的手册页。以下是你如何使用它:

$url = 'http://www.youtube.com/embed/WJlfVjGt6Hg?list=EC1512BD72E7C9FFCA&hl=en_US';

$parts = parse_url( $url );
print_r( $parts );

$path_parts = explode( '/', $parts['path'] );
print_r( $path_parts );

$last_part = $path_parts[count($path_parts)-1];

print "Youtube video ID = $last_part\n";

当你运行它时,你会得到这个:

Array
(
    [scheme] => http
    [host] => www.youtube.com
    [path] => /embed/WJlfVjGt6Hg
    [query] => list=EC1512BD72E7C9FFCA&hl=en_US
)
Array
(
    [0] => 
    [1] => embed
    [2] => WJlfVjGt6Hg
)
Youtube video ID = WJlfVjGt6Hg
于 2012-12-17T04:04:12.663 回答
0

您好,您可以使用以下正则表达式:

/embed\/([^\?]+)/

一个简短的解释 - 这匹配 'embed/' 之后不是问号的所有字符,直到它找到一个问号。

这是一个示例脚本,它向您显示您正在寻找的输出:

<?php

$test="http://www.youtube.com/embed/WJlfVjGt6Hg?list=EC1512BD72E7C9FFCA&amp;hl=en_US";

$matches = array();
preg_match('/embed\/([^\?]+)/', $test, $matches);
print_r($matches);
// The value we're looking for is in index 1 of the array
echo $matches[1];

输出是:

Array
(
[0] => embed/WJlfVjGt6Hg
[1] => WJlfVjGt6Hg
)
WJlfVjGt6Hg
于 2012-12-17T03:22:53.250 回答