• 締切済み

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

正規表現初心者です。 「晴れ」 → 「<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
  • 回答数2
  • ありがとう数0

みんなの回答

noname#79209
noname#79209
回答No.2

> 「晴」だけの場合でも、全ての処理を通してしまうのですが、 内容によっては、実行する順序が大事なときもあります。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

質問から見るに晴れの場合は $b = ereg_replace("晴","<img src=hare.gif>",$b); ではなく $b = ereg_replace("晴れ","<img src=hare.gif>",$b); と思います。 日本語でやるときはマルチバイト関数(mb_ereg_replaceとか)を使ったほうが良いでしょう。

関連するQ&A

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

    正規表現でタグの置換をしたいと試行錯誤しております。 もう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
  • 正規表現でタグを関数に置換

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

    • ベストアンサー
    • PHP
  • この検索を正規表現にするにはどう書けばいいでしょう?

    (name.gif)、('name.jpg')、(name_a.png)があって その中身のback.gifだけを検索で拾いたいのです。 自分なりに調べて \w+\w+(.gif|.jpg|.png) で ()、('')を除いた中身だけを拾えるようになったのですが、時々 (name-b.gif)、('n-ame.jpg')、(n-a-m-e.png) のようにハイフンが混じっているものが拾えなく困っています。 ハイフンも混じっても大丈夫な正規表現の書き方を どなたか教えてください。

    • ベストアンサー
    • PHP
  • 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
  • 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
  • HTMLのタグ内をすべて大文字・小文字に変換

     Windowsのフリーソフトで、HTMLのタグだけに限定して大文字・小文字に変換できるソフトってありますか?  例えば、大文字に変換させたいなら、 <img src="image/image.gif" alt="イラストです。" width=100 height=100>  というタグを <IMG SRC="image/image.gif" ALT="イラストです。" WIDTH=100 HEIGHT=100>  というように変換させたいのです。URLなどは変換せずに、あくまでタグだけです。  作っているページが統一性無いため、全部統一させたいので……  そういった機能のついたソフトはないでしょうか。出来れば、レジストリをいじらないものがいいです。  よろしく、お願いします。

  • どなたか助けて下さい

    天気予報をrssで取得して晴ならば画像を表示するようにしているのですがcase文に入ってくれません。試しにechoで表示させたら1=晴と表示されます。何が考えられますでしょうか?どなたか助けて下さい。 echo "1=", $wether[1]; $wether = split("<br />", $description); switch($wether[1]){ case "晴": $buf .= "<img src='/image/hare.gif'>"; break; ・・・あと続く }

    • ベストアンサー
    • PHP
  • 正規表現について

    HTMLファイルを読み込み、特定の文字列にリンクを付けて出力したいのですが上手くいきません。 例: <img src="./seiki_hyougen.gif" alt="正規表現についての説明">更に正規表現を知りたい方は、<a href="special.html">正規表現の詳しい説明</a>をクリックして下さい。  ↓正規表現をキーワードにしてリンクを付けたい。 正:<img src="./seiki_hyougen.gif" alt="正規表現についての説明">更に<a href="seiki_hyougen.html">正規表現</a>を知りたい方は、<a href="special.html">正規表現の詳しい説明</a>をクリックして下さい。 誤:<img src="./seiki_hyougen.gif" alt="<a href="seiki_hyougen.html">正規表現</a>についての説明">更に<a href="seiki_hyougen.html">正規表現</a>を知りたい方は、<a href="special.html"><a href="seiki_hyougen.html">正規表現</a>の詳しい説明</a>をクリックして下さい。 尚、下記URLのサンプルを参考にしてスクリプトを作成しています。 http://php.oss.eznetsols.org/manual/ja/function.preg-split.php $r = preg_split('((\/a>)|(<a))', $html, -1, PREG_SPLIT_DELIM_CAPTURE); for ($i = 0; $i < count($r); $i++) { if ($r[$i] == "<a") { $i++; continue; } $r[$i] = preg_replace( "/(正規表現)/i", "<a href='seiki_hyougen.html'>\\1</a>", $r[$i] ); } return join("", $r); この(正規表現)の部分で上手い正規表現を使えばalt="×××"の中にリンクタグが入らないようにできるのでは?と思っているのですが・・・。 どうか、良い方法を教えて下さい。よろしくお願いいたします。

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

    その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
  • ある文字列から特定のタグとその中身を削除する方法について教えてください

    ある文字列から特定のタグとその中身を削除する方法について教えてください。 PHP4.3.9を使って作業する予定でスキルアップをしています。 表題の件について、教えていただければと存じます。 例えば、下記の文字列があるとします。  "あ<b>いいいい</b>う<b>ええええええええ</b>お" この<b>タグに囲まれた文字だけを削除して、"あうお"という文字を取得したいのです。 preg_replace関数、mb_ereg_replace関数を使えば出来そうな予感はするのですが 恥ずかしながら正規表現の書き方が分からず、やりたいことが実現できておりません。 これらの関数に限らず、簡単に実現できる方法があればご教授いただけないでしょうか。 以上、宜しくお願いいたします。

    • ベストアンサー
    • PHP