2016-07-13 3 views
0

Так у меня есть это регулярное выражение для получения ссылки YouTubeПолучить весь URL без заданных параметров

/(http|https):\/\/www\.youtube\.com\/watch\?v=(\w+)/i 

Но проблема в том, что он не будет забрать конец звена что-то вроде этого:

https://www.youtube.com/watch?v=videoID&sdfgsdfgsdfg;jsfdg;lkjsdf;gkj

Это поднимает https://www.youtube.com/watch?v=videoID и оставляет &sdfgsdfgsdfg;jsfdg;lkjsdf;gkj в одиночку. Я хочу, чтобы он взял всю строку, сохраняя при этом идентификатор видео.

+2

Что вы имеете в виду " забрать всю строку "? 'v = (\ w +). *'? – TessellatingHeckler

+0

Вероятно, он останавливается на '&', потому что это не соответствует '\ w' –

+0

@TessellatingHeckler спасибо, но я ищу что-то, где он перестанет искать совпадение после того, как найдет место. Используя это, я могу получить URL + полный абзац после него, и он будет соответствовать всему этому в видео. –

ответ

0

Попробуйте

/https?:\/\/www\.youtube\.com\/watch\?.*?&?v=(\w+)(?:&[^\s]+)?/i 
  • https? такая же, как (?:http|https), вы не сказали, что вам необходимо захватить протокол
  • /watch\? ...
    • .*? - Потребляйте любые дополнительные параметры запроса
    • &? - Если есть другая paramters запрос, то будет &
    • v=(\w+)(?:&[^\s]+)? - Захват VideoID и, возможно, остальная часть URL до пробельных
+0

К сожалению, это захватывает больше, чем остальная часть URL-адреса. Я хочу, чтобы иметь возможность читать текст после URL-адреса, и совпадение подбирает все, даже если там есть место (вероятно, из-за использования периода). –

+1

См. Edit. https://regex101.com/r/nQ4yD0/1 –

Смежные вопросы