文字列の抜き出しと置換に関する質問

このQ&Aのポイント
  • 質問者は、文字列を抜き出して置換するための方法を知りたいとしています。
  • 具体的な処理方法として、ループ処理を行う方法を提案されています。
  • また、質問者は「preg_match()」などの別の方法についてもアドバイスを求めています。
回答を見る
  • ベストアンサー

文字列を抜き出して置換

《../img.jpg》 と言う文字列を <a href="../img.jpg"><img src="../img.jpg"></a> と言う具合に置き換えて書き出したいのですが、 $text="テスト文章《img.jpg》<br>テスト文章《test.gif》"; $test01=(strpos($text, "《")+2); $test02=(strpos($text, "》")-$test01); $test03=substr($text,$test01,$test02); $test04="<a href=\"".$test03."\"><img src=\"".$test03."\"></a>"; $test_txt=str_replace($test03,$test04,$text); これだと、 「テスト文章<a href="img.jpg"><img src="img.jpg"></a><br>テスト文章《test.gif》」 となってしまい、《../img.jpg》が複数個ある場合の処理がうまく出来ず困っています。 ループ処理すればいいのでしょうけど、どのような方法が適切なのか分かりません。 また、これ以外の方法「preg_match()」などで、いい方法がありましたら、ご教授よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数1

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

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

単に正規表現で置き換えをしては如何でしょうか <?php $text="テスト文章《img.jpg》<br>テスト文章《test.gif》"; $pattern = '/《(.*?)》/i'; $replacement = '<a href="../${1}"><img src="../${1}"></a>'; echo preg_replace($pattern, $replacement, $text); ?>

font_color
質問者

お礼

なるほど!正規表現でやれば簡単なんですね。 ありがとうございました!

関連するQ&A

  • JavaScriptを用いた文字列置換

    JavaScriptを用いて、以下のようなことが可能でしょうか。 <div class="test"> <A Href="http://xxx"> <Img Src="hoge.gif"> </A></div> 上記タグを下記タグに置換したいです。 <div class="test"> <Img Src="hoge.gif"> </div> ようはAタグを丸々削除したいのですが、JavaScriptで可能でしょうか。 お分かりの方お教え下さい。

  • 正規表現で置換

    その1 $str = "ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげ"; ↓ $str = "ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="./foo/faa/fii/xxx.jpg" width="320" height="240" />ほげほげ"; その2 $str = "<img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげ"; ↓ $str = "<img src="./foo/xxxx.jpg" width="320" height="240" />ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="./foo/faa/fii/xxx.jpg" width="320" height="240" />ほげほげ"; このような文字列があった時に、次のように従って置換したいです。 1.imgのタグの内部に、「http://yyy.hoge.jp/hage/hige/xxx.jpg」という文字列があった場合、「./foo/faa/fii/xxx.jpg」という文字列に置き換える。 2.それ以外のURLの場合は置換しない。 3.その1とその2では「xxx.jpg」となっていますが、jpg以外の拡張子の場合も存在する。 4.日本語とURLの位置や個数はバラバラです。 5.URLの中のxxxとyyyは不定の文字列で、hage、hoge、hige、foo、faa、fiiは固定です。 6.使用している言語はPHPです。正規表現を1度だけでできれば理想的ですが、今回は2回に渡った処理でも問題ありません。 以上です。正しく処理できる正規表現、あるいは下記の正規表現の誤りを教えて頂ければ幸いです。 お手数ですが、よろしくお願い致します。 下記の方法では、うまくできませんでした。 $pattern = "/http:\/\/.*?hoge.jp\//"; $replacement = "./"; $str= preg_replace($pattern, $replacement, $str); $pattern2 = '/\/?hage\/hoge/'; $str = preg_replace($pattern2, '/foo/faa/fii', $str);

    • ベストアンサー
    • PHP
  • 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); どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • 画像の下に文字が来ないようにするには

    画像の下に文字が来ないようにするにはどうすればいいでしょうか? <li>タグの中に、左に画像、右に文字を改行して表示させたいのですが、 改行すると画像の下に2行目が来てしまいます。 これをを避けるにどうすればいいでしょうか? 下記のコード、すべて思い通りになりません。 <!DOCTYPE html> <html lang="ja"> <head> <title>test</title> </head> <body> <li> <a href="#"> <img src="C:\UsersDesktop\test.jpg"> <span>test</span><br><span>test</span> </a> </li> <li> <a href="#"> <img src="C:\UsersDesktop\test.jpg"> <span>test<br>test</span> </a> </li> <li> <a href="#"> <img src="C:\UsersDesktop\test.jpg"> <p>test<br>test</p> </a> </li> </body> </html>

    • ベストアンサー
    • HTML
  • 正規表現でタグの置換をしたいと試行錯誤しております。

    正規表現でタグの置換をしたいと試行錯誤しております。 もう1歩のところだと思いますがなかなかうまくいきません。 imgタグのsrcの中身を置換したいと思っております。 <img src="/uploads/abc.gif"><img src="/uploads/test/aaa.jpg"> 上記のタグを下記のように置換 <img src="cid:abc.gif"><img src="cid:aaa.jpg"> ディレクトリの部分を「cid:」とし、その後にファイル名とする。 preg_replace('/<img[^>]*src="([^"]+).+>/', "<img src=\"cid:$1\">", $body); 上記のようなコードにまではたどり着きましたがディレクトリの削除がうまくいきません。 良い方法があれば教えてください。

    • ベストアンサー
    • PHP
  • 勝手にタグが改変されてしまいます。

    初心者レベルでお許しください。 ブログにタグを貼ろうとしていますが、 <a href="~><img src="~></a><br><br><a href="~><img src="~></a><img src="~/gif.gif"> という構文をソースで入力し、 普通のモードに変えると、何故か勝手に改変されタグも変わってしまいます。 (~の部分はIDやホームページなどがかかれています。) <a target="_blank" href="http~></a><br /> <br /> <a target="_blank" href~></a><img alt="" src="http~> これが勝手に改変されないようにするにはどうしたらよろしいのでしょうか? 宜しくお願いいたします。

  • htmlの修正のため、正規表現で2つほど質問です。

    秀丸を使っています。 下記の2つをやりたいのですが、いまひとつうまくいきません。 ご教授いただけると幸いです。 <p><br /></p> <a href="a.html">あいうえお</a><br /> <a href="k.html">かきくけこ</a><br /> <p><br /></p> ↓ <p><br /></p> あいうえお<br /> かきくけこ<br /> <p><br /></p> <img alt="" src="../images/aaa.jpg" /> <img alt="" src="../images/bbb.jpg" /> ↓ <a href="index.html"><img border="0" alt="" src="../images/aaa.jpg" /></a> <a href="index.html"><img border="0" alt="" src="../images/bbb.jpg" /></a>

  • 正規表現(~を含まないものにマッチ)

    Perlの正規表現について質問です。 画像<img src="http://hogehoge.com/img/gokuu.jpg" border=0><a href="http://hogehoge.com/">hogehoge</a><br> 画像<img src="http://hogehoge.com/img/pikkoro.jpg" border=0><a href="http://hogehoge.com/">hogehoge</a><br> 画像<img src="http://hogehoge.com/img/bejiita.jpg" border=0><a href="http://hogehoge.com/">hogehoge</a><br> 画像<img src="http://hogehoge.com/img/gohan.jpg" border=0><a href="http://hogehoge.com/">hogehoge</a><br> 画像<img src="http://hogehoge.com/img/buruma.jpg" border=0><a href="http://hogehoge.com/">hogehoge</a><br> ↓ 処理後 ↓ 画像<img src="gazo_new1.jpg" border=0><a href="http://hogehoge.com/">hogehoge</a><br> 画像<img src="gazo_new2.jpg" border=0><a href="http://hogehoge.com/">hogehoge</a><br> 画像<img src="gazo_new3.jpg" border=0><a href="http://hogehoge.com/">hogehoge</a><br> 画像<img src="gazo_new4.jpg" border=0><a href="http://hogehoge.com/">hogehoge</a><br> 画像<img src="gazo_new5.jpg" border=0><a href="http://hogehoge.com/">hogehoge</a><br> (変更した画像:gokuu.jpg,pikkoro.jpg,bejiita.jpg,gohan.jpg,buruma.jpg,) 以上のように 画像URL部分のみを gazo_new(連番).jpg に変更させ、 変更前の画像URL一覧を表示させるスクリプトを書いてみました。 $htmldata にHTMLの全データが格納されているとします。 $i=1; while($htmldata=~/(<\s*img.*?src.*?=["\s]*)([.\/]*?\/)?((?:(?!gazo_new)[^"\s>])*)?["\s]?.*?>/i){ $imgurlparts .="$3,"; $htmldata=~ s/(<\s*img.*?src.*?=["\s]*)((?:(?!gazo_new)[^"\s>])*)?(["\s]?.*?>)/$1gazo_new$i.jpg$3/i; $i++; } $htmldata .="(変更した画像:$imgurlparts)"; どうにもうまく動きません。 何卒ご教示をお願い致します。

    • ベストアンサー
    • Perl
  • フルスライドの画像上に文字を入れたい

    すみません、初心者です。 htmlは、 <div id="container"> <div class="fullSlideShow"> <ul> <li><a href="#1"><img src="img/photo01.jpg" alt=""></a></li> <li><a href="#2"><img src="img/photo02.jpg" alt=""></a></li> <li><a href="#3"><img src="img/photo03.jpg" alt=""></a></li> <li><a href="#4"><img src="img/photo04.jpg" alt=""></a></li> <li><a href="#5"><img src="img/photo05.jpg" alt=""></a></li> <li><a href="#5"><img src="img/photo06.jpg" alt=""></a></li> </ul> </div> <div class="helo"> <h1>site title</h1> <p>abcdefg</p> </div> と書いてみました。CSSですが、 .fullSlideShow h1 { position: absolute; z-index:500; left: 40px; top: 40px; padding-right: 40px; font-size: 2em; line-height: 1.20; } .fullSlideShow h1 a.textlink { color: white; text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5); text-decoration: none; } としてみましたが表示されません。まだサイズや位置は気にせず表示されるように試してみているのですが、どうも文字が画面上に現れてくれません。 とりあえず、h1とpだけでも表示させたいのですが、教えて頂けないでしょうか。 どうぞ宜しくお願いします。

    • ベストアンサー
    • CSS
  • jqueryのloadで読み込んだページ内でthickboxで画像を表示する方法

    画像表示処理方法で教えて頂ければと思います。 テスト用に2つのファイル(index.html, test.html)を用意しました。 index.htmlで thickboxを使用して画像をクリックすると希望通り (画像がアップ表示)の動作をします。 しかしindex.htmlのloadで test.html読み込んだ時の画像部分が、 target="_self"で押したときの動作になってしまいます。 解決方法、よろしくお願いします。 -----index.html----- <html> <head> <link href="thickbox.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="thickbox.js"></script> <script type="text/javascript"> <!-- function init(){ $("#Test").load("test.html"); } // --> </script> </head> <body onload="init()"> <div id="Test"></div> <hr> (2)<a href="test.gif" title="" class="thickbox"><img alt="" src="test.gif" /></a> </body> </html> -----test.html----- (1)<a href="test.gif" title="" class="thickbox"><img alt="" src="test.gif" /></a>

専門家に質問してみよう