Ответ 1

Попробуйте следующее:

^https?://(www\.)?twitter\.com/(#!/)?(?<name>[^/]+)(/\w+)*$

Подгруппа "имя" будет содержать имя пользователя Twitter.
Это регулярное выражение предполагает, что каждый URL-адрес находится в отдельной строке.


Чтобы использовать его в JS, используйте это:

^https?://(www\.)?twitter\.com/(#!/)?([^/]+)(/\w+)*$

Результат находится в подгруппе $3.

Ответ 2

Есть еще несколько тестовых примеров для создания универсального регулярного выражения.

  • https URL-адреса также действительны
  • URL-адреса, такие как twitter.com/@username, также попадают в профиль имени пользователя

Это должно сделать трюк в PHP

preg_match("|https?://(www\.)?twitter\.com/(#!/)[email protected]?([^/]*)|", $twitterUrl, $matches);

Если preg_match возвращает 1 (совпадение), то результат находится на $matches[3]

Ответ 3

это регулярное выражение отлично работает в jQuery

$('#inputTwitter').blur(function() {
      var twitterUserName = $(this).val();
      $(this).val(twitterUserName.match(/https?:\/\/(www\.)?twitter\.com\/(#!\/)[email protected]?([^\/]*)/)[3])

});

Ответ 4

Ломбо-ответ - мой любимый, но он запустит любую строку запроса с результатом:

http://www.twitter.com/#!/donttrythis?source=internet

приведет к имени пользователя "donttrythis? source = internet"

Я бы изменил его следующим образом:

preg_match("|https?://(www\.)?twitter\.com/(#!/)[email protected]?([^/\?]*)|", $twitterUrl, $matches);

Добавление \? в класс исключенных символов после того, как имя пользователя гарантирует исключение строки запроса.

Ответ 5

Это основано на ответе Ломбо, работает без http (s) тоже, менее голоден (не сохраняя пробелы после имени пользователя) и возвращает сначала результат.

Проверьте его в действии: https://regex101.com/r/xI2vF3/3

Для js:

(?:https?:\/\/)?(?:www\.)?twitter\.com\/(?:#!\/)[email protected]?([^\/\?\s]*)

Ответ 6

Это регулярное выражение соответствует всем четырем указанным URL-адресам. Имя пользователя присутствует в $1

m[twitter\.com/+(?:#!/+)?(\w+)]

Используйте это, чтобы проверить

perl -le '$_="<url>"; m[twitter\.com/+(?:#!/+)?(\w+)]; print $1'

Ответ 7

Это работает для меня (в PHP): /twitter\.com(?:\/\#!)?\/(\w+)/i

Ответ 8

Я нашел, что Lombo отвечает за лучшее, за исключением того, что он не будет работать, если URL-адрес был www.twitter.com/example. Следующее работает для меня и на www.

  $dirty_twitter = array( 'https://twitter.com/', 'http://twitter.com/', 'www.twitter.com/', 'https://www.twitter.com/', 'http://www.twitter.com/', 'twitter.com/' );
  $clean_twitter = str_replace( $dirty_twitter, '', $clean_twitter );