0

画像や YouTube ビデオへのリンクとは別に、有効なリンクを照合する必要があります。通常のリンクの周りにアンカー タグを配置したいのですが、画像と youtube ビデオの周りにそれぞれ img タグと iframe タグを配置します。

これが私のコードです

$str = "some stuff with links"

    $output = preg_replace('#(http://([^\s]*)\.(jpg|gif|png))#', 
                    '<img src="$1" alt="" width="" height="" />', $str);



    $output = preg_replace('#(http://([^\s]*)youtube\.com/watch\?v=([^\s]*))#', 
                  '<iframe width="420" height="315" src="http://www.youtube.com/embed/$3" frameborder="0" allowfullscreen></iframe>', $output);

    var_dump($output);

これは通常のリンクを無視します。他の 2 つのリンクは検出せず、リンクを検出するように変更するにはどうすればよいですか? もっと簡単な方法はありますか?

ありがとう

4

1 に答える 1

1

2 つの否定後読みアサーションを使用します。

/^(http:\/\/([^\s]*)(?<!\.(?:jpg|gif|png))(?<!youtube\.com\/watch\?v=\w{11}))$/

または、#区切り文字として使用して、

#^(http://([^\s]*)(?<!\.(?:jpg|gif|png))(?<!youtube\.com/watch\?v=\w{11}))$#

否定の後読みアサーションには、可変長のワイルドカードを使用できないことに注意してください。したがって、「YouTube 動画は 11 文字の文字列で識別される」などのルールを期待する必要があります。

これがRubular のデモです。

于 2012-08-05T08:11:45.847 に答える