2016-10-15 2 views
0

Я пытаюсь проверить, является ли данный URL-адрес twitch.tv, а затем извлекает из него имя канала. Я пришел с этим регулярным выражением:Extract Twitch ursername from url

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

Я, кажется, работает, но только если первые символы имени пользователя не один из них (ш, т, р, с, ч, с, v, б)

Например, если я ввожу URL: 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

Это должно сделать это

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

Затем используйте

$4 
+0

Я пробовал это так: 'preg_match ("/^ [(http | https): \/\/www \ .twitch \ .tv \ /] + ((#)? [A-zA-Z0-9] [\ w] {2,24}) $/", $ input_line, $ output_array);' и я не работал, он имеет тот же эффект ... Просто пропускает символы (w, t, p, s , h, c, v) Вы можете протестировать его здесь http://www.phpliveregex.com/ – DiyanDesigns

+0

Эй, я обновил свой ответ! Его немного другой подход, но должен быть полезен @DiyanDesigns – Vedant

+1

Спасибо за ваше время, я уверен, он работает, но я уже исправил свою проблему, добавив параметр Ungreedy @Vedant – DiyanDesigns

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; 
+0

Я уже пробовал но по какой-то причине это не сработало: вот мой код: '$ urls = parse_url ($ url); if (isset ($ urls ['host']) && $ urls ['host'] == 'twitch.tv') { $ id = ltrim ($ urls ['path'], '/'); } else { $ id = 0; } ' – DiyanDesigns

+0

Да, потому что $ urls ['host'] == 'twitch.tv' является ложным. Это должно быть $ urls ['host == "www.twitch.tv". Таким образом, это должно быть: '$ url = "https://www.twitch.tv/channelName"; $ urls = parse_url ($ url); print_r ($ urls); if (isset ($ urls ['host']) && $ urls ['host'] == 'www.twitch.tv ') {$ id = ltrim ($ urls [' path '],'/'); } else {$ id = 0; } echo $ id; ' – mush

1

мне удалось это исправить, добавив Ungreedy флаг моей регулярное выражение Вот рабочий код:

preg_match ("/^[(http|https)://www.twitch.t v /] + ((#)? [A-Za-Z0-9] [\ ш] {2,24}) $/U», $ URL, $ м)