こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP正規表現の難題・preg_replaceでイメージタグをリンクタグに…

PHPのpreg_replaceを使用して、
imgタグをaタグに置換するプログラムで躓いています。
全てのパターン$hogeで適用される正規表現をかけません。
(※現在パターン1のみ出来ない状況で困っています)
間違い箇所ありましたらご教授下さい。

■パターン1
$hoge = '<img src="http://test.jp/test.gif" class="test" style="border:none;" />';

■パターン2
$hoge = '<img src="http://test.jp/test.gif">';

■パターン3
$hoge = '<img width="100" src="http://test.jp/test.gif">';

preg_replace('/\<img(.*)src=\"?(http[\-_\.\!\~\*\'\(\)a-z0-9\;\/\?\:@&=\+\$\,\%\#]+(jpg|jpeg|gif|png|bmp))\"(.*)\>/i',"<a href='\\2'>link</a>",$hoge);

どうぞよろしくお願い致します。

投稿日時 - 2009-04-14 20:59:46

QNo.4879541

すぐに回答ほしいです

質問者が選んだベストアンサー

こんな感じで良いのでしょうか?

<?php
$hoge0 = '<img src="http://test.jp/test.gif" class="test" style="border:none;" />';
$hoge1 = '<img src="http://test.jp/test.gif">';
$hoge2 = '<img width="100" src="http://test.jp/test.gif">';

$ptn='/<img[^>]*(https?:.*?(gif|jpeg|jpg|bmp)).*?>/i';
$sub="<a href='\\1'>link</a>";

echo "\nhoge0= ".preg_replace($ptn,$sub,$hoge0);
echo "\nhoge1= ".preg_replace($ptn,$sub,$hoge1);
echo "\nhoge2= ".preg_replace($ptn,$sub,$hoge2);
?>

投稿日時 - 2009-04-14 22:36:47

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

httpやら拡張子やらいります?

<?php
$hoge=<<<eof
<img src="http://test.jp/test.gif" class="test" style="border:none;" />
<img src="http://test.jp/test.gif">
<img width="100" src="http://test.jp/test.gif">
eof;

$pattern='/<img .*?src="(.*?)".*?>/i';
$replacement="<a href='\\1'>link</a>";

print preg_replace($pattern,$replacement,$hoge);
?>

投稿日時 - 2009-04-15 12:30:26

ANo.3

<?php
$hoge = '<img src="http://test.jp/test.gif" class="test" style="border:none;" />';

print(preg_replace('{<img(?:.*)src="(http://[-_.!~*\'()a-z0-9;/?@&=+$,%#]+\.(?:jpe?g|gif|png|bmp))"(?:.*)>}i',"<a href='\\1'>link</a>",$hoge));

投稿日時 - 2009-04-14 22:44:19

ANo.1

厳密なチェックはしていませんが、要はhttpで始まるURLを抜き出せばいいのですよね?だとすれば、正規表現のパターンももっと単純化できそうな気がします。
ひとまず「http(.*)+(gif|jpeg|jpg|bmp)」というパターンで抽出したい文字列を変数$hogeに保存し、strip_tags関数でimgタグを削除。最後に<a href="{$hoge}">を元の文字列に入れておしまい、という感じでいかがでしょうか?
# かなり冗長かつ泥臭いので、おススメはできませんが・・・

参考URL:http://www.rider-n.sakura.ne.jp/regexp/regexp.php

投稿日時 - 2009-04-14 21:50:02

あなたにオススメの質問