Php 正则表达式从Flickr照片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

因此,我尝试在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.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);
}