Регулярное выражение URL профиля Facebook - PullRequest
19 голосов
/ 05 марта 2011

Учитывая следующие профили Facebook и URL-адреса страниц, я намереваюсь извлечь идентификаторы профиля или имена пользователей в первую позицию соответствия.

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. имя пользователя

Результат 3
1.
2. 207279373093

Идеальный результат будет выглядеть так:

Результат 1
1. 123456789

Результат 2
1. someusername

Результат 3
1. 207279373093

То есть я хотел бы, чтобы идентификатор профиля всегда возвращался на первой позиции.

Было бы также идеально, если бы www.facebook.com/ и facebook.com/ тоже не подходили.

Ответы [ 8 ]

17 голосов
/ 06 марта 2011

Я бы порекомендовал Rad Software Дизайнер регулярных выражений .

Также этот онлайн-инструмент великолепен https://regex101.com/ (хотя большинство людей предпочитают http://regexr.com/)

(?:(?:http|https):\/\/)?(?:www.)?facebook.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(?=\d.*))?([\w\-]*)?
9 голосов
/ 17 июля 2012

Я недавно сделал суть, которая отлично работает на приведенных примерах:

# 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 голосов
/ 17 июля 2017

Только это регулярное выражение работает корректно для всех URL FB:

/(?:https?:\/\/)?(?:www\.)?(?:facebook|fb|m\.facebook)\.(?:com|me)\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-\.]+)(?:\/)?/i
2 голосов
/ 12 февраля 2016

Самый завершенный шаблон для URL профиля Facebook:

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

Он обнаруживает все случаи + одно важное отличие. Другие шаблоны регулярных выражений распознают http://www.facebook.com/ как действительный URL-адрес профиля Facebook, в то время как он не является действительным URL-адресом профиля. Это просто оригинальный URL-адрес Facebook, а не адрес пользователя или страницы. Но это регулярное выражение может отличить нормальный URL от профиля и URL страницы и принимает только действительный.

1 голос
/ 29 октября 2016

совпадений facebook.com , m.facebook.com , mbasic.facebook.com и fb.me (короткая ссылка )

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

Регулярное выражение URL Facebook DEMO

Facebook URL regex DEMO

0 голосов
/ 03 июля 2019

регулярное выражение, которое будет правильно идентифицировать страницы профиля с. в названии, например 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 голосов
/ 15 марта 2017

Это хорошо работает для меня. Он может определять URL личного профиля и исключать все фан-страницы и группы.

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

enter image description here

0 голосов
/ 01 июня 2016

Я попробовал каждый ответ выше, и каждый не работает по крайней мере по одной причине. Скорее всего, это не поможет OP, но если кто-то, как я, обнаружит это в веб-поиске, я считаю, что это правильный ответ:

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

Поддерживает практически все, что я могу придумать, кроме проверки, что домен содержит facebook.com. Если вам нужно проверить, действителен ли URL-адрес, это следует сделать вне регулярного выражения, чтобы убедиться, что страница или профиль действительно существуют. Зачем проверять это дважды, особенно если одна из проверок не завершена?

  • Не обрезает первый символ
  • Получение URL-адресов с периодами
  • Игнорирует лишние параметры GET
  • Поддержка / имена пользователей, предоставляемые приложением Facebook
  • Поддерживает обе структуры профиля URL
  • Не соответствует facebook.com/ или facebook.com (игнорируя их)
  • Работает с и без www. (игнорируя это)
  • Поддерживает http и https (игнорируя их)
  • Поддерживает как facebook.com, так и fb.com (игнорируя их)
  • Поддерживает страницы со специальными символами в имени (игнорируя их)
  • Поддерживает #! (игнорируя это)
  • Поддерживает bounce_page #! (игнорируя это)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...