关于php:从长网址中提取Facebook照片ID

extracting facebook photo id from a LONG url

我已经在该网站上搜索了如何从以photo.php开始的url中提取facebook id?fbid =,但是我有一个很长的url并且知道如何获取照片id

Example1:photo.php?fbid = 10151987845617397(完整的URL存储在$ url变量中,我相信该变量是使用preg_match检查的)

1
!preg_match("|^http(s)?://(www.)?facebook.com/photo.php(.*)?$|i", $url) || !$pid

上面的代码获取Facebook id 10151987845617397,并将其放在变量$ pid中。

如果我的网址很长,该如何更改代码?
这是网址
范例2:https://www.facebook.com/nokia/photos/a.338008237396.161268.36922302396/10151987845617397/?type = 1


简单的解决方案,而且可读性强:将整个字符串用作正则表达式,在要匹配的内容周围使用()

1
2
3
4
5
6
7
8
9
10
// $tmp[1] = www or nothing
// $tmp[2] ="user" (i.e nokia)
// $tmp[3] = album id?
// $tmp[4] = photos
// $tmp[5] = Long url as requested
function extract_id_from_album_url($url) {
    preg_match('/https?:\\/\\/(www.)?facebook\\.com\\/([a-zA-Z0-9_\\- ]*)\\/([a-zA-Z0-9_\\- ]*)\\/([a-zA-Z0-9_\\.\\-]*)\\/([a-zA-Z0-9_\\-]*)(\\/\\?type=1&theater\\/)?/i', $url, $tmp);

    return isset($tmp[5]) ? $tmp[5] : false;
}

需要使用

反斜杠以确保将.视为文字(而不是正则表达式语法)。允许可选网址的问号。使用更多的正则表达式语法可以使匹配的"查询"更短,更可扩展,但也使其更难阅读。