Регулярное выражение 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:
- 123456789
Результат 2:
-
someusername
Результат 3:
-
207279373093
Идеальный результат будет выглядеть так:
Результат 1:
- 123456789
Результат 2:
- someusername
Результат 3:
- 207279373093
То есть я хотел бы, чтобы идентификатор профиля всегда возвращался на первой позиции.
Также было бы идеально, если бы www.facebook.com/и facebook.com/тоже не подходили.
Ответы
Ответ 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\/[^\/]+$
![введите описание изображения здесь]()