Задать вопрос
@Alk90
php, mysql, jquery, css, html, api

Как заменить все вхождения по одному?

Всем привет! Использую функцию preg_replace() для замены BB кода видео из youtube, на код плеера Но проблема вот в чем:
preg_replace('/\[media\](?:https?:)?(?:\/+)?(?:www\.)?(?:m\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=|embed\/)?([0-9a-zA-Z_\-]+)(.+)?\[\/media\]/is', '<div class="video_object"><iframe width="auto" height="auto" src="https://www.youtube.com/embed/$1?rel=0&autoplay=0" frameborder="0" allowfullscreen></iframe></div>', $text);


Шаблон регулярного выражения захватывает все от первого [media] до последнего закрывающегося [/media] если их в тексте несколько:

[media]https://youtube.com/embed/csdfdsfY[/media]
[media]https://youtube.com/embed/csdfsdfY[/media]
[media]https://youtube.com/embed/cRsdfdY[/media]

Тут шаблон заменит все одним плеером.
Я понимаю, что дело в жадности шаблона, но не знаю как исправить, ведь взять все то, что между тегами [media] и поставить знак вопроса не получается...
  • Вопрос задан
  • 71 просмотр
Подписаться 1 Средний Комментировать
Решения вопроса 1
@4iloveg
Full-Stack HTML Developer
https://regex101.com/r/YzzcXO/1 Модификатор /s убери в конце своей регулярки
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stimulate
@Stimulate
могу
preg_replace('/\[media\](.*?)\[\/media\]/is', '<div class="video_object"><iframe width="auto" height="auto" src="https://www.youtube.com/embed/$1?rel=0&autoplay=0" frameborder="0" allowfullscreen></iframe></div>', $text);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы