我需要从一些看起来像这样的YouTube网址中找到一个字符串:
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 );}
我该怎么做?
答案 0 :(得分:3)
这是您网址中路径的基本名称:
$url = 'http://www.youtube.com/embed/WJlfVjGt6Hg?list=EC1512BD72E7C9FFCA&hl=en_US';
echo basename(parse_url($url, PHP_URL_PATH));
// WJlfVjGt6Hg
答案 1 :(得分:1)
不要使用正则表达式。并非所有涉及字符串的问题都可以通过正则表达式解决。
使用PHP内置的parse_url()
函数为您分解部分。
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
答案 2 :(得分:0)
您好,您可以使用以下正则表达式:
/embed\/([^\?]+)/
一个简短的解释 - 这与'embed /'之后的所有字符匹配,这些字符不是问号,直到找到问号。
这是一个示例脚本,显示您正在寻找的输出:
<?php
$test="http://www.youtube.com/embed/WJlfVjGt6Hg?list=EC1512BD72E7C9FFCA&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