• ベストアンサー

正規表現でタグを関数に置換

お世話になります。 携帯向けの絵文字コンバートライブラリを使いたいのですが 現状DBに格納されている文字列が 文中に絵文字代用のgifをイメージタグで呼び出しているような内容です。 そこで <img src="./emoji/F95B.gif"> を 正規表現を使ってうまいこと $MobileClass->Convert("F95B") といった具合に置換をかけたいのですがなかなか上手く行かず詰まっております。 どなたか、この場合の正しい書き方をご教授お願いいたします。

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

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

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.4

全置換で使うなら、こんな感じでしょうか http://ideone.com/WPrUP すみません、「$MobileClass->Convert も文字列に・・・」という部分が、自分にはよくわかりませんでした。 利用状況を正しく把握出来ていないのかもしれませんが、例えばevalで置換後文字列を評価するような物とは違うのでしょうか 後は実際のコードを見せていただければ、もっとPHP詳しい人からアドバイス頂けそうな気もします。

nahisa
質問者

お礼

ありがとう御座います! eval を使うことで望んでいた動作を行うことが出来ました。

その他の回答 (3)

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.3

今回のサンプル文字列一箇所だけだとさっき書いたので間に合いそうなんですが、要件的にはもうちょっと細かく書いたほうが良いかもしれないですね・・・ ANo1さんも書かれているような、全部マッチング後に後方参照で引っ張るやり方も載せておきます。 ※gifのパスやHTMLタグの変動には弱くなります。 http://ideone.com/6TNbW

nahisa
質問者

補足

ご回答ありがとう御座います。 参考にさせいていただいて動かしてみたのですが $MobileClass->Convert 部分も文字列として認識されてしまいました。 また、複数の場合に1箇所目を置換するところで終わってしまうのですが複数の場合は書き方が違ってくるのでしょうか? 用件説明不足で申し訳ありません。 今回は長文の文字列の中に複数の <img src="./emoji/F95B.gif"><img src="./emoji/F95C.gif"><img src="./emoji/F9EB.gif"> といったタグが分散している形で、それらを一括で変更できればと思い質問させていただきました。

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.2

正しいかはわからないのですが、取り敢えず動いたものを載せておきます。 http://ideone.com/MpL0b <おまけ> 最初はこういう感じで書いてみたかったのですが、できるかどうかすら分からず・・・。 http://ideone.com/xBFtF

回答No.1

PHP では試していませんが、大体下のような感じだと思います。 検索文字列 <img src="\./emoji/(....)\.gif"> 置換文字列 $MobileClass->Convert("\1") ※ \1 後方参照

nahisa
質問者

補足

ご回答ありがとう御座います。 参考にさせいていただいて動かしてみたのですが $MobileClass->Convert 部分も文字列として認識されてしまいました。 用件説明不足で申し訳ありません。 今回は長文の文字列の中に複数の <img src="./emoji/F95B.gif"><img src="./emoji/F95C.gif"><img src="./emoji/F9EB.gif"> といったタグが分散している形で、それらを一括で変更できればと思い質問させていただきました。

関連するQ&A

  • 正規表現で、文字をタグに

    正規表現初心者です。 「晴れ」 → 「<img src=hare.gif>」に 「雨」 → 「<img src=ame.gif>」といった感じで 文字を画像タグに変換するシステムを考えているのですが 「晴れのち雨」を→「<img src=hare.gif><img src=nochi.gif><img src=ame.gif>」に 「雨時々曇り」を→「<img src=ame.gif><img src=tokidoki.gif><img src=kumori>」 にする場合ですが。 function tenki($a){  $b = $a;  $b = ereg_replace("晴","<img src=hare.gif>",$b);  $b = ereg_replace("雨","<img src=ame.gif>",$b);  $b = ereg_replace("曇り","<img src=kumori.gif>",$b);  $b = ereg_replace("雪","<img src=yuki.gif>",$b);  $b = ereg_replace("時々","<img src=tokidoki.gif>",$b);  $b = ereg_replace("のち","<img src=nochi.gif>",$b);  echo $b; } tenki("天気文字列"); で良いのでしょうか?? 「晴」だけの場合でも、全ての処理を通してしまうのですが、それでいいのか疑問なので質問させていただきました。

    • 締切済み
    • PHP
  • 正規表現でタグの置換をしたいと試行錯誤しております。

    正規表現でタグの置換をしたいと試行錯誤しております。 もう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
  • 特定のファイルがソースのイメージタグを置換

    特定ファイルがsrcに指定されているイメージタグのみを置換したいと思っています。 $ptn = "<img*[^>]*>"; $ret = mb_eregi_replace($ptn,$replace,$str); でイメージタグの置換はできたので、これにsrc属性を付け加えて下のようなソースにしてみましたが、期待していたように動いてくれません。 $ptn = "<img*src=\"images/foo\.gif\"[^>]*>"; $ret = mb_eregi_replace($ptn,$replace,$str); どの部分が悪いのでしょうか?宜しくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現による置換

    HTMLの構文も正規表現もよく理解しないままに作業をしているので とんちんかんなことを言っているのかもしれません 合わせて指摘してもらえると助かります Yahoo pipes 使ってる中で発生している現象です 目的としては HTMLタグから一部の文字列を取り出したく 変換元のXTMLは以下のようなものです(一部加工しています(***** の部分は隠しています) <a rel="nofollow" target="_blank" href="http://*****.html">抽出したい文字列</a> <img alt="new" class="new" height="15" src="http://*****.jpg" width="32"/> に対して 置換対象  .*html">(.*)  置換後  $1   を行ってからさらに 置換対象  (.*)<img.*    置換後  $1  としたところ 一応抽出はできました    本来 2回目は  (.*)</a  の気がするのですが1回目の結果を見るとなぜか</a>    の部分もなくなってしまっています  これも不思議なのですが 2回に分けて行うのは面倒なので1度で行いたいと思い 置換対象  .*html">(.*)<img.* 置換後  $1 としてみたのですが 求めている文字列の抽出をすることができませんでした     .一応 *html">(.*)</a.*  というのもやってみましたが結果は変わりませんでした これは当然の結果ななのか変換(処理)ツールの不具合なのかの判断ができません 分かる人がいたら教えてもらえないでしょうか 情報足りなければ補足させていただきます

  • 急ぎでお願いします!正規表現の置換について

    こんにちわ。 HTMLのコードを置換エディターで一括で書き換えたいと思っています。 例えば <h2 id="01"><img src="../imgs/dish/index_tit_01.gif" alt="サンプル" width="630" height="36" /></h2> というようなコードをaltの文字以外は削除して <h2 id="01">サンプル</h2> にしたい場合、検索する文字列、置換する文字列にはどのような正規表現を適用したらよいでしょうか? また<h2 id="01">が<h2 ="id=02">,<h2 ="id=03">と複数ある場合があるので、 できたらid=数字のところは01,02,03,04などにもまとめて適用させたいと思っています。 どうかご教授よろしくお願いします!!!

  • 正規表現を使った置き換えにおいての質問。置き換えたい文字列が変数だったら。

    こんにちは、 以下のような作業をperlで正規表現の置換を用いて行いたいのですがどのようにすればよいのでしょうか。 ===================================== $iが1-3までの数字をしめしています。 また、 $filename[1]='./gazou1.gif' $filename[2]='./gazou2.gif' $filename[3]='./gazou3.gif' のような配列変数があるとします。 以下のようなテキスト文章を $1$ $2$ $3$ 次のように変換します。 <img src="$filename[1]"> <img src="$filename[2]"> <img src="$filename[3]"> $filename[1-3]には画像のパス名がはいっているので、最終的出力されるときには <img src="gazou1.gif"> <img src="gazou2.gif"> <img src="gazou3.gif"> となるようにしたいです。 このような作業を行う置換操作はどのようにすればいいのでしょうか。 次のようにしてみましたが、できません。 for($i=1;$i<4;$i++){ $main_body=~ s/\$[$i]\$/<img src="$filname[$i]">/g; } ちなみに、これを実行すると <img src="">となり、何も入りません。 置換したい単語が変数だったらできないのでしょうか? 回答よろしくお願いします。

    • ベストアンサー
    • Perl
  • 正規表現で置換

    その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
  • ある文字列を含む<img>の削除

    いつもアドバイスありがとうございます。 今回、FC2ブログからワードプレスへ引っ越しすることになったのですが、 FC2ブログで使用していた画像の削除に手間取っています。 そこで、お伺いしたいのですが、Dream WeaverCS3を使って、 『ある文字列が入っているタグを削除する』 といった置換方法はないでしょうか? FC2で言えば、 <img src="http://blog-imgs-1.fc2.com/emoji/2012-02-06/654131.gif" alt="" border="0" style="border:0;" class="emoji"> <img src="http://blog-imgs-1.fc2.com/emoji/2012-02-06/654120.gif" alt="" border="0" style="border:0;" class="emoji"> 上記2つの絵文字を削除するために、 「http://blog-imgs」という文字列が入った<img>タグを一括で削除 という流れになると思います。 どなたかご助言をいただけないでしょうか。記事数が800以上有り、絵文字は3000回以上使用していると 思います。手作業でやるには気の遠くなる作業です・・・。 よろしくお願い致します。 ※DWを使用しない方法でも構いません。

  • preg_match_allで正規表現

    preg_match_allにて、次のように<img>が連続したソースから、 ※URLは全てダミーです <img src="http://a.com/a/a.jpg"><img width="10" src='http://b.com/b/b.gif' height="10"><img width="10" height="10" src='http://c.com/c/c.png"><img src=http://d.com/d/d.jpg><img src="http://e.com/hogefuga/e.jpg"> 個々のimgタグ全体と"<img~>"、 個々のsrc="~"のURLを抽出したいのですが、下記の条件でマッチさせることはできるでしょうか? 1. imgの属性位置・有無に問わず 2. 属性のくくりが、'" のどちらでも、または有無に問わず 3. src=~内に、"hogefuga"を含まないものにだけマッチ(否定形) 次のような正規表現で試したところ、 $pattern = '/<img.*?src=(\'|")?((?(?!hogefuga).)*\.(jpg|gif|png))(\'|")?.*?>/i'; 下のようにimgタグが1行づつ並んでいる場合は上手くいったのですが、連続して並んでいる場合は個々の、"<img~>"でマッチされませんでした。 ※URLは全てダミーです <img src="http://a.com/a/a.jpg"> <img width="10" src='http://b.com/b/b.gif' height="10"> <img width="10" height="10" src='http://c.com/c/c.png"> <img src=http://d.com/d/d.jpg> <img src="http://e.com/hogefuga/e.jpg"> 最終的にはsrc="~"のURLに応じて、画像をテキストリンクへ置換する、ということをしたいのですが、正規表現がよくわからず試行錯誤しています。 このような場合はどのような正規表現を書くべきなのでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • ブログを引っ越したのに・・

    ブログをgooからライブドアに引っ越しました。 めんどくさかったのですが、gooで書いた記事のhtmlをコピーして、 一個一個ライブドアのブログに貼り付ける作業をしました。 それなのに出来上がったブログを見てみると、画像が表示されないのです。 htmlを確認してみても、例えば <IMG src="http://blog.goo.ne.jp/img_emoji/atten.gif">というhtmlはきちんと書いてあるのに、表示されないのです。 gooの絵文字だからかな?と思ったのですが、 しかし、一度別のウインドウを開いて http://blog.goo.ne.jp/img_emoji/atten.gif を表示させると、 次みたときには、その表示した絵文字だけが見れるようになっているのです。 この不思議な現象は一体なんなんでしょうか? 私のパソコンの設定のせいであり、他の人には絵文字は見えてるのでしょうか?

専門家に質問してみよう