Reg exp для ссылки на YouTube
-
19-09-2019 - |
Вопрос
В системе, которую я разрабатываю, мне нужно распознать ссылку на YouTube в следующем формате
[youtube]url-адрес youtube[/youtube]
на данный момент я пришел к этому регулярному выражению:
#\[youtube\]http://www.youtube\.(.*)/watch\?v=([a-zA-Z0-9_-]*)\[\/youtube\]#s
Но этот шаблон не способен распознавать URL, подобный
[youtube] (англ.)http://www.youtube.com/watch?v=s3wXkv1VW54&feature=fvst [/youtube]
Обратите внимание на характеристика=fvst.
Кто-нибудь может помочь мне распознать все возможные URL YouTube?
Решение
Как насчет
|\[youtube\]http://www.youtube\.(.*?)/watch\?v=([a-zA-Z0-9_-]*)[%&=#a-zA-Z0-9_-]*\[\/youtube\]|s
Редактировать:Изменил регулярное выражение, чтобы сохранить только идентификатор видео внутри круглых скобок.
Другие советы
Примечания:
Я бы выполнил сопоставление URL-адресов без учета регистра (/i)
.соответствует чему угодно;используйте \.вместо этого, чтобы соответствовать URL-адресу
Кроме того, "www." в URL-адресах Youtube является необязательным.
Используйте (\.[a-z]+){1,2} вместо ".*", чтобы соответствовать ".com", ".co.uk", ..после "youtube"
Предполагая, что часть "&feature" является необязательной, регулярное выражение будет:
/\[youtube\]http:\/\/(www\.)?youtube(\.[a-z]+){1,2}\/watch\?v=([a-z0-9_-]*)(&feature=([a-z]+))?\[\/youtube\]/is
Предполагая, что часть "&feature" является необязательной, И могут быть другие параметры, кроме "feature".:
/\[youtube\]http:\/\/(www\.)?youtube(\.[a-z]+){1,2}\/watch\?v=([a-z0-9_-]*)(&([a-z]+)=([a-z0-9_-])+)*?\[\/youtube\]/is