Php 正则表达式从Flickr照片URL获取ID?
因此,我尝试在PHP中创建一个正则表达式,从照片的URL获取照片的ID 这些是潜在的模式:Php 正则表达式从Flickr照片URL获取ID?,php,regex,Php,Regex,因此,我尝试在PHP中创建一个正则表达式,从照片的URL获取照片的ID 这些是潜在的模式: https://www.flickr.com/photos/12037949754@N01/ www.flickr.com/photos/12037949754@N01/ flickr.com/photos/12037949754@N01/ https://www.flickr.com/photos/user/12341234123 www.flic
https://www.flickr.com/photos/12037949754@N01/
www.flickr.com/photos/12037949754@N01/
flickr.com/photos/12037949754@N01/
https://www.flickr.com/photos/user/12341234123
www.flickr.com/photos/user/12341234123
flickr.com/photos/user/12341234123
我猜我使用了preg\u match
,所以类似于:
if (preg_match("regex", $url, $matches)) {
return "flickr photo id:" . $matches[x];
}
但是我不确定如何创建这个正则表达式,以便它可以在每种情况下返回ID,因此它在$matches
中的位置每次都是相同的
有什么想法吗?我已经仔细看过regex了,但是运气不好 您可以使用此正则表达式为每个URL捕获照片id:
$regex = '~(?<=/)\d+(?:@\w+)?(?=/|$)~';
$regex='~(?
例如:
如果您不想要@N01
,那么只需:
if (preg_match("/([0-9]+)/",$url,$matches)){
return $matches[0];
}
您可以使用此正则表达式提取ID:
/(?:https?:\/\/)?(?:www\.)?flickr\.com\/photos\/(?:user\/)?(\d+)/
演示:
因此,将协议设置为可选的,www
子域设置为可选的,user/
设置为可选的。然后只捕获找到的数字
PHP演示:
PHP用法:
$regex = '/(?:https?:\/\/)?(?:www\.)?flickr\.com\/photos\/(?:user\/)?(\d+)/';
$url = 'https://www.flickr.com/photos/user/12341234123';
if (preg_match($regex, $url, $matches)) {
print_r($matches);
}
你用过吗?我发现计算正则表达式解决方案的最好方法就是在上面弄乱它们。/([0-9]+[\@a-zA-Z0-9]+)/
做你需要的吗?ID是什么,12341234123
和12037949754
?@chris85这些是我想要提取的照片ID。我在这些示例中使用了随机ID。这似乎拾取了前三个中的“@N01”位,我相信这不是照片ID的一部分。如果@
之后的部分不是照片ID的一部分(虽然这个问题还不清楚)然后OP可以使用:如果你只需要确保它是flickr,你可以做$parsed=parse\uURL($url);如果($parsed['host']=='flickr.com'){//然后做正则表达式}
谢谢你的建议!:-)
/(?:https?:\/\/)?(?:www\.)?flickr\.com\/photos\/(?:user\/)?(\d+)/
$regex = '/(?:https?:\/\/)?(?:www\.)?flickr\.com\/photos\/(?:user\/)?(\d+)/';
$url = 'https://www.flickr.com/photos/user/12341234123';
if (preg_match($regex, $url, $matches)) {
print_r($matches);
}