正则表达式 - 从URL中提取TwitterUsername

时间:2011-05-10 09:33:56

标签: regex twitter

我正在寻找一个通用正则表达式,它从网址中提取推特用户名。

示例网址

  

http://www.twitter.com/#!/donttrythis

     

http://twitter.com/KimKardashian

     

http://www.twitter.com/#!/KourtneyKardash/following

     

http://twitter.com/#!/jasonterry31/lists/memberships

8 个答案:

答案 0 :(得分:20)

还有一些测试用例可以实现通用正则表达式。

  • https网址也有效
  • twitter.com/@username等网址也会转到用户名的个人资料

这应该可以在PHP中解决这个问题

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

如果preg_match返回1(匹配),则结果显示在$matches[3]

答案 1 :(得分:14)

试试这个:

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

子组“name”将包含twitter用户名 这个正则表达式假设每个URL都在它自己的行上。


要在JS中使用它,请使用:

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

结果在子组$ 3中。

答案 2 :(得分:6)

这个正则表达式在jQuery中运行良好

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

});

答案 3 :(得分:3)

Lombo的答案是我最喜欢的,但它会使任何查询字符串出现结果:

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

将导致用户名为“donttrythis?source = internet”

我将其修改为:

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

在用户名之后将\?添加到排除的字符类可确保排除查询字符串。

答案 4 :(得分:2)

这个是基于Lombo的答案,没有http(s)的工作,不那么饿(不在用户名之后保留空格)并在结果中首先返回。

检查它的实际效果:https://regex101.com/r/xI2vF3/3

对于js:

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

答案 5 :(得分:1)

此正则表达式匹配所有四个给定的URL。用户名以$ 1

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

用它来检查

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

答案 6 :(得分:0)

这个适用于我(在PHP中):/twitter\.com(?:\/\#!)?\/(\w+)/i

答案 7 :(得分:0)

我发现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 );