Swap all youtube urls to embed via preg_replace()

php, preg-replace

Solution

You're not handling the end of the string properly. Remove the `$`, and replace it with the closing tag `</a>`. this will fix it.

 $search = '#<a(.*?)(?:href="https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch?.*?v=))([\w\-]{10,12}).*<\/a>#x';
 $replace = '<center><iframe width="560" height="315" src="http://www.youtube.com/embed/$2" frameborder="0" allowfullscreen></iframe></center>';
 $text = preg_replace($search, $replace, $text);

Problem

Hello I'm trying to convert youtube links into embed code. this is what I have: ``` <?php $text = $post->text; $search = '#<a(.*?)(?:href="https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch?.*?v=))([\w\-]{10,12}).*$#x'; $replace = '<center><iframe width="560" height="315" src="http://www.youtube.com/embed/$2" frameborder="0" allowfullscreen></iframe></center>'; $text = preg_replace($search, $replace, $text); echo $text; ?> ``` It works for one link. However if I add two, it will only swap the last occurrence. What do I have to change?

Original source