Facebook个人资料网址正则表达式

时间:2011-03-05 17:58:10

标签: regex facebook url

鉴于以下Facebook个人资料和网页网址,我的目的是将个人资料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
1.
2. someusername

结果3
1.
2. 207279373093

理想的结果如下:

结果1
1. 123456789

结果2
1. someusername

结果3
1. 207279373093

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

它也是理想的www.facebook.com/和facebook.com/也不匹配。

8 个答案:

答案 0 :(得分:17)

我建议使用 Rad Software正则表达式设计器

此在线工具也很棒[{3}}(尽管大多数人更喜欢https://regex101.com/

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

答案 1 :(得分: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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:2)

只有这个正则表达式才适用于所有FB网址:

exp

答案 4 :(得分:1)

匹配 facebook.com m.facebook.com mbasic.facebook.com fb.me (短链接)

{{1}}

Facebook URL regex DEMO

Facebook URL regex DEMO

答案 5 :(得分:0)

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

^(?:.*)\/(?:pages\/[[:alnum:]-]+\/)?(?:profile\.php\?id=)?([[:alnum:].]+)

支持基本上我能想到的一切,除了验证域名包含facebook.com。如果您需要检查URL是否有效,则应在正则表达式之外进行,以确保页面或配置文件实际存在。为什么要检查两次,特别是当其中一项检查不完整时?

  • 不会切断第一个字符
  • 抓住带有句点
  • 的网址
  • 忽略多余的GET参数
  • Facebook应用程序提供的支持/用户名
  • 支持两种配置文件网址结构
  • 与facebook.com/或facebook.com(忽略它们)不匹配
  • 使用和不使用www。 (忽略它)
  • 支持http和https(忽略它们)
  • 支持facebook.com和fb.com(忽略它们)
  • 支持名称中包含特殊字符的页面(通过忽略它们)
  • 支持#! (忽略它)
  • 支持bounce_page#! (忽略它)

答案 6 :(得分: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\.-]+)

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

答案 7 :(得分:-1)

这适合我。它可以检测个人资料网址,并排除所有粉丝页面和群组。

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

enter image description here