我正在寻找一个通用正则表达式,它从网址中提取推特用户名。
示例网址
http://www.twitter.com/#!/donttrythis
http://twitter.com/KimKardashian
答案 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 );