Вопрос

В системе, которую я разрабатываю, мне нужно распознать ссылку на 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top