Подтвердить что ты не робот

Регулярное выражение URL-адреса профиля Facebook

Учитывая следующие профили 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.   someusername

Результат 3:

  1.   207279373093

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

Результат 1:

  1. 123456789

Результат 2:

  1. someusername

Результат 3:

  1. 207279373093

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Я сделал последнее, что отлично работает с приведенными примерами:

# 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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

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

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

Ответ 6

Соответствует 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-адрес повторно Google DEMO

URL-адрес повторно Google DEMO

Ответ 7

Регулярное выражение, которое будет правильно идентифицировать страницы профиля с. в имени, таком как 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\.-]+)

Дайте мне знать, если вы нашли что-то, что не соответствует.

Ответ 8

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

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

введите описание изображения здесь