• ベストアンサー

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); どうぞよろしくお願い致します。

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

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

こんな感じで良いのでしょうか? <?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); ?>

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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); ?>

すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.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));

すると、全ての回答が全文表示されます。
noname#87667
noname#87667
回答No.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
すると、全ての回答が全文表示されます。

専門家に質問してみよう