Пожалуйста, регулярный запрос URL
Я хотел бы знать, может ли кто-нибудь помочь мне с проблемой регулярного выражения. Я хочу написать регулярное выражение для перехвата URL, похожих на этот URL:
www.justin.tv/channel_name_here
Я пытался:
/justin\.tv\/(.*)
Проблема, которую я получаю, заключается в том, что когда этот канал запускается, иногда URL-адрес превращается в что-то вроде этого:
www.justin.tv/channel_name_here#/w/45365675688
Я не могу поймать это.:(Может кто-нибудь, пожалуйста, помогите мне с этим? Я просто хочу поймать название канала без символа фунта и остальной части URL.
Вот несколько примеров URL:
www.justin.tv/winning_movies#/w/6347562128
http://www.justin.tv/cine_accion_hd16#/w/6347562128/18
http://www.justin.tv/fox_movies_hd1/
Я хотел бы получить:
winning_movies
cine_accion_hd16
fox_movies_hd1
Заранее спасибо!:)
2 ответа
Короткий ответ:
(?<=justin\.tv\/)([^#\/]+)
Длинный ответ:
Давайте разделим это на части. Сначала посмотрите на заднюю часть.
([^#\/]+)
Это разделяет строку на части, которые не содержат ни "#", ни "/". Теперь давайте посмотрим на первую часть.
(?<=justin\.tv\/)
Синтаксис "(?<=" С последующим ")" называется положительным взглядом сзади (на этой странице есть хорошие примеры и объяснения различных типов поиска). Используя простой пример:
(?<=A)B
В приведенном выше примере написано "Я хочу, чтобы все" B "были сразу после" A "". Возвращаясь к нашему большому примеру, мы говорим, что мы хотим, чтобы все части (разделенные '#' или '/') были сразу после части, называемой justin.tv/.
Посмотрите здесь пример выражения в действии.
@justin\.tv/([^#/]+)@
Если вы хотите, чтобы все до определенного символа (-set), используйте отрицательный класс. Кроме того, при работе с регулярным выражением для URL-адресов использование / в качестве разделителя подвержено ошибкам, так как вы должны экранировать все /. Вместо этого используйте что-то другое (например, @ в этом случае)