preg_match - 需要从url中获取一个字符串

时间:2012-12-17 03:09:41

标签: php regex preg-match

我需要从一些看起来像这样的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 );}

我该怎么做?

3 个答案:

答案 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&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