我需要从url 中获取vine视频id
所以像这样的链路的输出
https://vine.co/v/bXidIgMnIPJ
像这个
bXidIgMnIPJ
我试着在Vimeo的其他问题中使用代码(非VINE)从Vimeo获取img缩略图
这是我试图使用的,但我没有成功
$url = 'https://vine.co/v/bXidIgMnIPJ';
preg_replace('~^https://(?:www'.)?vine'.co/(?:clip:)?('d+)~','$1',$url)
basename可能吗?
<?php
$url = 'https://vine.co/v/bXidIgMnIPJ';
var_dump(basename($url));
http://codepad.org/vZiFP27y
假设它总是那样的格式,您可以通过/
分隔符来分割url。像这样的简单url不需要Regex。
$id = end(explode('/', $url));
这里提到的问题是preg_replace
:的解决方案
$s = 'https://vine.co/v/bXidIgMnIPJ';
$new_s = preg_replace('/^.*'//','',$s);
echo $new_s;
// => bXidIgMnIPJ
或者,如果您需要验证输入字符串是否确实是指向vine.co:的链接
$new_s = preg_replace('/^(https?:'/'/)?(www'.)?vine'.co.*'//','',$s);
我不知道/v/
部分是否总是存在,还是总是v
。。。如果是这样,那么它也可能被添加到正则表达式中以进行更严格的验证:
$new_s = preg_replace('/^(https?:'/'/)?(www'.)?vine'.co'/v'//','',$s);
以下是我正在使用的:
function getVineId($url) {
preg_match("#(?<=vine.co/v/)[0-9A-Za-z]+#", $url, $matches);
if (isset($matches[0])) {
return $matches[0];
}
return false;
}
我使用了一个向后看的方法来确保"vine.co/v/"总是在ID之前,同时忽略url是HTTP还是HTTPS(或者它完全没有协议)。它假定ID是任意长度的字母数字。它将忽略id后面的任何字符或参数(如谷歌活动跟踪参数等)。
我使用了"#"分隔符,这样我就不必转义正斜杠(/),以获得更清晰的外观。
用'/'分解字符串,最后一个字符串就是您要查找的:)代码:
$vars = explode("/",$url);
echo $vars[count($vars)-1];
$url = 'https://vine.co/v/b2PFre2auF5';
$regex = '/^http(?:s?):'/'/(?:www'.)?vine'.co'/v'/([a-zA-Z0-9]{1,13})$/';
preg_match($regex,$url,$m);
print_r($m);
1. b2PFre2auF5