0

さて、皆さん、私はこれを行う複数の方法を見つけました、そして私はそれを機能させることさえできました、しかし私の問題はこれです、私の理解からのpreg_replaceはパターンに一致するすべてを置き換えるはずですが、それは一度だけ実行されるようです。

これが私が必要としているものです。ユーザーが自分のプロフィールに好きなものを投稿できる機能を実行しているサイトがあります。YouTubeリンクも投稿して、これらのリンクを埋め込みに変えたいと考えています。問題は、複数の動画を投稿するときに発生します。動画の1つだけが埋め込まれ、さらに悪いことにテキストが削除されます。

$test = "This is a great lecture: http://www.youtube.com/watch?v=Ps8jOj7diA0 This is another great lecture http://www.youtube.com/watch?v=k6U-i4gXkLM What are your opinions on the two?"
$patterns[] = '|http://www\.youtube\.com/watch\?.*\bv=([^ ]+)|';
$replacements[] = ' <br /><iframe width="420" height="315" src=http://www.youtube.com/embed/$1 frameborder="0" allowfullscreen></iframe><br />';
$patterns[] = '|&feature=related|';
$replacements[] = '';
$test = preg_replace($patterns, $replacements, $test);
echo $test;
Output:
"This is a great lecture: 
<iframe width="420" height="315" src=http://www.youtube.com/embed/k6U-i4gXkLM frameborder="0" allowfullscreen></iframe>
What are your opinions on the two?"

ご覧のとおり...最初のビデオと2番目のビデオの間のすべてを切り取り、2番目のビデオのみを埋め込みます。YouTubeリンクによって生成された余分なものを削除し、ユーザーが投稿するメッセージのすべてのテキストを保持できるソリューションが必要です。アイデアはありますか?ありがとう。

4

2 に答える 2

2

貪欲にならないようにします。

http://www\.youtube\.com/watch\?.*?\bv=([^ ]+)

?ここ?.*?からの余分なことに注意してくださいhttp://www\.youtube\.com/watch\?.*\bv=([^ ]+)

于 2012-04-25T21:46:17.130 に答える
0

Jackのコードには2つの問題があります。-行末(\ n文字)にあるリンクを適切にキャッチしない-オプションの追加パラメーター(例:&list = ...)を削除しない

完全なコードは次のとおりです。

$test = "This is a great lecture: http://www.youtube.com/watch?v=Ps8jOj7diA0&list=PL33AFE53E080251DF This is another great lecture http://www.youtube.com/watch?v=k6U-i4gXkLM What are your opinions on the two?"
$patterns = array('|http://www\.youtube\.com/watch\?.*?\bv=([^&]+).+?\s|i');
$replacements = array(' <br /><iframe width="400" height="300" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe><br />');
$test= preg_replace($patterns, $replacements, $test);
于 2013-12-04T13:08:01.947 に答える