0

画像や YouTube 動画ではない URL を次のように置き換えようとしています。

preg_replace('#(http://([^\s]*)(?<!\.(?:jpg|gif|png))(?<!youtube\.com/watch\?v=\w{11}))#', '<a href = $1> $1 </a>', $output);

これは、http: //foobar.com/baz.jp g やhttp://www.youtube.com/watch?v=abcdefghij k などの URL と一致します。太字の部分は一致するものを示しています。

どうすればこれを修正できますか?

4

1 に答える 1

0

[\s]*非スペーシー文字に怠惰に一致するものを使用しています。ただし、次のアサーションが一致しない場合はトラックバックします。したがって、所有格にする必要があります。

そうするために使用\S*+します。ここで、\Sはすべての非スペース文字を意味します([^\s]実際と同じですが、簡潔です)。また、+After *Quantifierは、アサーションが失敗した場合にPCREが文字単位で撤回することを回避します。

http://www.regular-expressions.info/possessive.htmlも参照してください。

また、ビデオアサーションを後ろから一致させるのではなく、そのhttp://部分の後に移動することをお勧めします。(?!youtube)Youtubeリンクには他のURLパラメータがある可能性があるため、/watch

于 2012-08-05T14:03:44.223 に答える