Facebook 个人资料 URL 正则表达式

问题描述 投票:0回答:9

鉴于以下 Facebook 个人资料和页面 URL,我的目的是将个人资料 ID 或用户名提取到第一个匹配位置。

http://www.facebook.com/profile.php?id=123456789  
http://www.facebook.com/someusername  
www.facebook.com/pages/Regular-Expressions/207279373093  

到目前为止我的正则表达式看起来像这样:

(?:http:\/\/)?(?:www.)?facebook.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(\d.*))?([\w\-]*)?

这会产生以下结果:

结果1:

  1. 123456789
  2.  

结果2:

  1.  
  2. 一些用户名

结果3:

  1.  
  2. 207279373093

理想的结果是这样的:

结果1:

  1. 123456789

结果2:

  1. 一些用户名

结果3:

  1. 207279373093

也就是说,我希望个人资料标识符始终返回到第一个位置。

www.facebook.com/ 也很理想,而 facebook.com/ 也不匹配。

regex facebook url
9个回答
23
投票

我推荐Rad Software正则表达式设计器

这个在线工具也很棒https://regex101.com/(尽管大多数人更喜欢http://regexr.com/

(?:(?:http|https):\/\/)?(?:www.)?facebook.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(?=\d.*))?([\w\-]*)?

10
投票

我不久前提出了一个要点,它与给定的示例配合得很好:

# Matches patterns such as:
#    http://www.facebook.com/my_page_id => my_page_id
#    http://www.facebook.com/#!/my_page_id => my_page_id
#    http://www.facebook.com/pages/Paris-France/Vanity-Url/123456?v=app_555 => 45678
#    http://www.facebook.com/pages/Vanity-Url/45678 => 45678
#    http://www.facebook.com/#!/page_with_1_number => page_with_1_number
#    http://www.facebook.com/bounce_page#!/pages/Vanity-Url/45678 => 45678
#    http://www.facebook.com/bounce_page#!/my_page_id?v=app_166292090072334 => my_page_id

/(?:http:\/\/)?(?:www\.)?facebook\.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-]*)/

获取最新版本:https://gist.github.com/733592


8
投票

只有这个正则表达式适用于所有 FB URL:

/(?:https?:\/\/)?(?:www\.)?(?:facebook|fb|m\.facebook)\.(?:com|me)\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-\.]+)(?:\/)?/i

6
投票

我已经尝试了上面的每一个答案,但每个答案都至少由于一个原因而不起作用。这很可能对OP没有帮助,但如果像我这样的人在网络搜索中找到这个,我相信这是正确的答案:

^(?:.*)\/(?:pages\/[A-Za-z0-9-]+\/)?(?:profile\.php\?id=)?([A-Za-z0-9.]+)

基本上支持我能想到的所有内容,除了验证域是否包含 facebook.com 之外。如果您需要检查 URL 是否有效,则应在正则表达式之外完成此操作,以确保页面或个人资料确实存在。为什么要检查两次,特别是当其中一项检查不完整时?

  • 不切断第一个字符
  • 抓取带有句点的 URL
  • 忽略多余的 GET 参数
  • 支持 Facebook 应用程序提供的 /用户名
  • 支持两种个人资料 URL 结构
  • 与 facebook.com/ 或 facebook.com 不匹配(忽略它们)
  • 无论有无 www 均可使用。 (忽略它)
  • 同时支持 http 和 https(忽略它们)
  • 同时支持 facebook.com 和 fb.com(忽略它们)
  • 支持名称中含有特殊字符的页面(通过忽略它们)
  • 支持#! (忽略它)
  • 支持弹跳页面#! (忽略它)

5
投票

最完整的 Facebook 个人资料网址模式:

/(?:https?:\/\/)?(?:www\.)?facebook\.com\/.(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-\.]*)/

它检测所有情况+一个重要的区别。其他正则表达式模式将 http://www.facebook.com/ 识别为有效的 Facebook 个人资料 URL,但它不是有效的个人资料 URL。它只是原始 Facebook URL,而不是用户或页面地址。但此正则表达式可以区分普通 url 与个人资料和页面 url,并且只接受有效的 url。


4
投票

匹配 facebook.comm.facebook.commbasic.facebook.comfb.me(短链接)

/(?:https?:\/\/)?(?:www\.)?(mbasic.facebook|m\.facebook|facebook|fb)\.(com|me)\/(?:(?:\w\.)*#!\/)?(?:pages\/)?(?:[\w\-\.]*\/)*([\w\-\.]*)/ig

Facebook URL 正则表达式演示


0
投票

正则表达式将正确识别带有 .以 www.facebook.com/my.name 等名称命名,并且还会排除 www.facebook.com/ 或 home.php,因为它不是有效的 Facebook 页面。

https://regex101.com/r/koN8C2/2

(?:(?:http|https):\/\/)?(?:www.|m.)?facebook.com\/(?!home.php)(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(?=\d.*))?([\w\.-]+)

如果您发现任何不匹配的内容,请告诉我。


0
投票

我不知道为什么我对此投入了大量资金,尽管这并不是我真正需要的东西或缺少解决方案 但我添加了一个结合所有规则的超精细解决方案+不允许连续的句点或少于 5 个字符的配置文件

在这里查看我的正则表达式:https://regex101.com/r/6OQYWr/2
(您可以查看单元测试部分以查看它处理的所有案例)


-2
投票

这对我来说效果很好。它可以检测个人资料网址,并排除所有粉丝页面和群组。

.+www.facebook.com\/[^\/]+$

© www.soinside.com 2019 - 2024. All rights reserved.