从网址中提取Twitch ursername

时间:2016-10-15 10:04:39

标签: php regex url preg-match twitch

我正在尝试验证给定的网址是否为twitch.tv,然后从中提取频道名称。我想出了这个正则表达式:

preg_match("/^[(http|https):\/\/www.twitch.tv\/]+((?:[a-zA-Z0-9][\w]{3,24}))$/", $url, $output_array);

我似乎工作,但前提是用户名的第一个字符不是其中之一(w,t,p,s,h,c,v,b)

例如,如果我输入网址:https://www.twitch.tv/AchannelName 它将输出:

  

0 => https://www.twitch.tv/AchannelName

     

1 =>的 AchannelName

但是对于以下网址:https://www.twitch.tv/ channelName` 它将输出:

  

0 => https://www.twitch.tv/channelName

     

1 =>的 annelName

PS:我使用的是[a-zA-Z0-9]因为用户名不能以下划线开头。

3 个答案:

答案 0 :(得分:1)

我设法通过在我的正则表达式中添加Ungreedy标志来修复它 这是工作代码:

  

的preg_match(" / ^ [(HTTP | HTTPS)://www.twitch.tv/] +((#)[A-ZA-Z0-9] [\ W] {2,24 })$ /的û&#34 ;,   $ url,$ m)

答案 1 :(得分:0)

您可以简单地使用内置的PHP函数parse_url。 http://php.net/manual/en/function.parse-url.php。这将为您提供URL的所有部分和频道名称,如下所示:/ channelname。

更新后的答案。

$url = "https://www.twitch.tv/channelName";

$urls = parse_url($url);


if(isset($urls['host']) && $urls['host'] == 'www.twitch.tv') {

  $id = ltrim($urls['path'],'/'); }else{ $id = 0; }

echo $id;

答案 2 :(得分:0)

这应该这样做

^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$

然后使用

 $4