从 url 中提取 Twitch 用户名

Extract Twitch ursername from url

我正在尝试验证给定的 url 是否为 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)

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

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

1=>AchannelName

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

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

1=>annelName

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

您可以简单地使用内置的 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;

应该这样做

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

然后使用

 

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

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