preg_matchで複数一致した場合の処理
いつも大変お世話になっております。
「Twitpic 等の画像投稿サービスのサムネイル画像の URL」
http://blog.irons.jp/2009/12/23/twitter_thumb_url/
上記のサイトをそのまま参考にしまして以下のようなことをしようと思っています。
・テキストに画像サービスのURLが記載されていたらサムネイル画像を表示
・普通のURLが含まれていた場合は普通のリンクとして表示
――――――――――――――――――――
$text = "テキスト http://twitpic.com/xxxxxx http://twitpic.com/yyyyyy http://p.twipple.jp/zzzzzz http://example.com/aaaaaa";
$patterns = array(
// twitpic
array('/http:\/\/twitpic[.]com\/(\w+)/', '<img src="http://twitpic.com/show/thumb/$1" width="150" height="150" />'),
// ついっぷる フォト
array('/http:\/\/p[.]twipple[.]jp\/([\w]+)/', '<img src="http://p.twipple.jp/show/large/$1" />'),
// 通常URL
array('/((?<!")https?:\/\/[a-zA-Z0-9\.\/~_?&=%@#!;*:-]+)/', '$1'),
);
foreach ($patterns as $pattern) {
if (preg_match($pattern[0], $text, $matches)) {
$url = $matches[0];
$text= preg_replace($pattern[0], '<a href="'. $url .'" target="_blank">'.$pattern[1]."</a> ", $text);
}
}
echo $text;
――――――――――――――――――――
これを実施しましたところ、
テキスト [twitpic画像xxxxxx] [twitpic画像yyyyyy] [ついっぷる画像zzzzzz] [通常URLのリンクaaaaa]
と、表示自体は希望している形に出来ました。
しかし、[twitpic画像yyyyyy]の部分において、画像はyyyyyyが表示されているのですが、リンク先がhttp://twitpic.com/xxxxxxと、一つ目の画像になってしまっているのです。
おそらく、preg_matchでヒットした最初のURLを変換対象にしてしまっていると思うのですが、
preg_match_allにしたり、様々なやり方で工夫したのですが、どうしても解決できなく、質問させて頂きました。
この場合、2つ目の画像のリンク先をhttp://twitpic.com/yyyyyy へ向けるにはどのように修正したらよろしいでしょうか。
何卒宜しくお願い致します。