拿facebook页面url并分别存储id和slug

时间:2011-06-29 17:08:56

标签: php regex

我正在开发一个网络应用程序,用户可以使用以下格式输入他们的Facebook页面网址: http://www.facebook.com/pages/Graffiti/119622954518

http://www.facebook.com/thefirkinandfox

使用php - 我如何自动检测哪种格式,然后拆分(爆炸?)部件(slug和id或只是第二版的slug)。

当您以管理员身份查看自己的Facebook页面时,有时会在网址末尾显示查询数据,如何检测并删除该页面?我认为答案将是某种类型的正则表达式 - 但我真的只是用它来确保输入是电子邮件而且仍然不能理解它......提前感谢。

可能的entires可能包括也可能不包括http://开头...我想说明这个......

2 个答案:

答案 0 :(得分:2)

如果你想使用一个正则表达式,试试这个:

$url = 'www.facebook.com/pages/Graffiti/119622954518';
if(preg_match('@^(https?://)?(www\.)?facebook\.com/((pages/([^/]+)/(\d+))|([^/]+))@', $url, $matches)) {
  $slug = isset($matches[5]) ? $matches[5] : (isset($matches[7]) ? $matches[7] : null);
  $id = isset($matches[6]) ? $matches[6] : null;
}

答案 1 :(得分:0)

两部分:

^http://www.facebook.com/pages/([^/]+)/([^/]+)(?:\?.*)$

如果第一个不匹配,请使用:

^http://www.facebook.com/([^/]+)(?:\?.*)$

爆炸,你提到的是捕获组的价值。

所以代码看起来像这样:

$subject = "my string";
if (preg_match ('#^http://www.facebook.com/pages/([^/]+)/([^/]+)(?:\?.*)$#', $subject))
   print ($groups[1] + ' ' + $groups[1]);
else if (preg_match ('#^http://www.facebook.com/([^/]+)(?:\?.*)$#', $subject))
   print ($groups[1]);