鉴于以下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/也不匹配。
答案 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\-]*)/
答案 2 :(得分:2)
Facebook个人资料网址最完整的模式:
/(?:https?:\/\/)?(?:www\.)?facebook\.com\/.(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-\.]*)/
它检测所有情况+一个重要的区别。其他正则表达式模式将http://www.facebook.com/识别为有效的Facebook个人资料网址,而它不是有效的个人资料网址。它只是原始的Facebook URL而不是用户或页面地址。但是这个正则表达式可以区分普通网址与个人资料和网页网址,只接受有效网址。
答案 3 :(得分:2)
只有这个正则表达式才适用于所有FB网址:
exp
答案 4 :(得分:1)
答案 5 :(得分:0)
我已经尝试了上面的每一个答案,每个答案至少有一个原因不起作用。这很可能对OP没有帮助,但如果像我这样的人在网络搜索中发现这一点,我相信这是正确答案:
^(?:.*)\/(?:pages\/[[:alnum:]-]+\/)?(?:profile\.php\?id=)?([[:alnum:].]+)
支持基本上我能想到的一切,除了验证域名包含facebook.com。如果您需要检查URL是否有效,则应在正则表达式之外进行,以确保页面或配置文件实际存在。为什么要检查两次,特别是当其中一项检查不完整时?
答案 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)