Я пытаюсь заменить ссылки на YouTube, включая теги a, на код для вставки iframe.Что я получил так далеко:
$tube_link = "<a href="http://www.youtube.com/watch?v=XA5Qf8VHh9I&feature=g-all-u&context=G2f50f6aFAAAAAAAADAA" target="_blank" rel="nofollow">http://www.youtube.com/watch?v=XA5Qf8VHh9I&feature=g-all-u&context=G2f50f6aFAAAAAAAADAA</a>" $search = '%<a(.*)(?:href="https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch\?v= ))([\w\-]{10,12})(?:)([\w\-]{0})\b%x'; $replace = '<iframe width="150" height="84" src="http://www.youtube-nocookie.com/embed/$2"></iframe>'; $embed_code = preg_replace($search, $replace, $tube_link);
Результат:
<iframe src="http://www.youtube-nocookie.com/embed/XA5Qf8VHh9"></iframe>&feature=g-all-u&context=G2f50f6aFAAAAAAAADAA</a>
Как мне избавиться от оставшегося:
&feature=g-all-u&context=G2f50f6aFAAAAAAAADAA</a>
Thnx!
Используйте это регулярное выражение:
$search = '#<a(.*?)(?:href="https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch\?v=))([\w\-]{10,12}).*$#x';
ТЕСТИРОВАНИЕ:
$tube_link = '<a href="http://www.youtube.com/watch?v=XA5Qf8VHh9I&feature=g-all-u&context=G2f50f6aFAAAAAAAADAA" target="_blank" rel="nofollow">http://www.youtube.com/watch?v=XA5Qf8VHh9I&feature=g-all-u&context=G2f50f6aFAAAAAAAADAA</a>'; $search = '#<a(.*?)(?:href="https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch\?v=))([\w\-]{10,12}).*$#x'; $replace = '<iframe width="150" height="84" src="http://www.youtube-nocookie.com/embed/$2"></iframe>'; $embed_code = preg_replace($search, $replace, $tube_link); var_dump($embed_code);
ВЫХОД:
string(97) "<iframe width="150" height="84" src="http://www.youtube-nocookie.com/embed/XA5Qf8VHh9I"></iframe>"
если вы уверены, что ссылка на YouTube действительна, вы можете просто использовать простую форму
$search = '/^.*?v=(\w*?)&.*$/';
с заменой $1.
$1
См.пример здесь!
Или добавьте .*$ в конце вашего шаблона, чтобы пометить все до конца строки темы.
.*$