3

こんにちは、YouTube リンクを埋め込みコードに変換しようとしています。

これは私が持っているものです:

<?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;
?>

1 つのリンクに対して機能します。ただし、2 つ追加すると、最後のオカレンスのみが交換されます。何を変更する必要がありますか?

4

4 に答える 4

6

文字列の末尾を適切に処理していません。を削除$し、終了タグ に置き換え</a>ます。これで修正されます。

 $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);
于 2012-05-03T16:42:56.343 に答える
0

これを試して :preg_replace($search, $replace, $text, -1);

私はそれがデフォルトであることを知っていますが、誰が知っています...

EDIT動作しない場合は試してください。

do{
    $text = preg_replace($search, $replace, $text, -1, $Count);
}
while($Count);
于 2012-05-03T16:38:24.660 に答える
0

より効率的な正規表現を次に示します: http://pregcopy.com/exp/26、これを PHP に変換します: ("s" 修飾子を追加)

<?php

$text = $post->text;

     $search = '#<a (?:.*?)href=["\\\']http[s]?:\/\/(?:[^\.]+\.)*youtube\.com\/(?:v\/|watch\?(?:.*?\&)?v=|embed\/)([\w\-\_]+)["\\\']#ixs';
     $replace = '<center><iframe width="560" height="315" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe></center>';

     $text = preg_replace($search, $replace, $text);


echo $text;
?>

試して

于 2012-05-03T16:56:40.183 に答える