• 締切済み

HTMLタグの内側の指定文字を削除

文字列中からHTMLタグの内側のダブルクォーテーションを削除したいのですが、どのようにすればできるでしょうか。 <FONT color="#000000">  → <FONT color=#000000> それと、\<[^\>]*\> と <[^>]*> と <.*?> はどのように違うのでしょうか。 ご教授よろしくお願いします。

みんなの回答

noname#227796
noname#227796
回答No.3

s/<([^<>]*)color="?([^<>"\s]*)"?([^<>]*)>(.*)/<$1color="$2"$3>$4/ig で置換できると思います。 正規表現の部分はもう少し書きようがあるかもしれませんが・・・ これだと、colorだけでなく、bgcolorの属性もcolorで一致するので置換できますし、#000000だけでなく、redとかの色の名前による指定にも対応できるでしょう。 sizeとかtypeとかの属性も、colorの部分を変えることで対応できると思います。 ただ、これだと全属性について一行一行書かなきゃいけませんので、配列に属性名を格納しておいて、ループさせて配列から属性名を取り出して置換して・・・という方がすっきりしたプログラムになるでしょう。

nchan
質問者

お礼

回答いただきありがとうございます。

noname#227796
noname#227796
回答No.2

>文字列中からHTMLタグの内側のダブルクォーテーションを削除したい そのダブルクォーテーションは、付けたままにしておきましょう。 HTMLでは、本来タグの属性値はダブルクォーテーションまたはシングルクォーテーションで括っておくのがお約束、っていうか仕様です。 なくてもブラウザが勝手に補完してくれるので問題ありませんが、本来付けておくべきものです。 付けるのをくせにして、削除するという発想そのものを削除して下さい。 やるのであれば、ダブルクォーテーションを「付加」してください。 <FONT color=#000000> → <FONT color="#000000"> それだったら、知恵をお貸ししますが。

nchan
質問者

補足

ご指摘ありがとうございます。 i_am_aliveさんのおっしゃるとおり <FONT color=#000000> → <FONT color="#000000"> という発想のほうが正しいと思います。 そこでi_am_aliveさんにお願いなのですが、ダブルクォーテーションの閉じ忘れの場合のダブルクォーテーション付加でのお知恵をお貸し下さい。 <FONT color="#000000> → <FONT color="#000000"> or <FONT color=#000000"> → <FONT color="#000000"> わがまま言ってすみません。

  • haporun
  • ベストアンサー率40% (230/562)
回答No.1

後者の回答。 "<" も ">" もとくに制御文字じゃないので、"\<[^\>]*\>" は "<[^>]*>" と同じ。 "<abc>" などにマッチさせたいが、"abc" のなかに ">" が含まれている "<a>bc>" などにはマッチさせたくないので、"<" + (">" でない文字が0文字以上) + ">" というならびにマッチさせたいという意味。 "<.*?>" はたとえば "<abc>def>ghi>" のような文字列があったとき、"<abc>def>ghi>" にも "<abc>def>" にも "<abc>" にもマッチしてしまいそうだが、"?" がついていると、そのなかでももっとも短い "<abc>" にマッチすることになる。 "?" がついていないと、その中でもっとも長い "<abc>def>ghi>" にマッチするようになる。

nchan
質問者

お礼

とてもわかりやすく回答して頂きありがとうございます。

関連するQ&A