我正在尝试验证给定的网址是否为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]因为用户名不能以下划线开头。
答案 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