• ベストアンサー

Perlでの文字列置換に関して

Perlでの文字列置換についてうかがいます。 文字列中からHTMLタグを排除しようと思うのですが、 タグ部分のみをうまく指定することができず、困っています。 どうか御知恵をお貸し下さい。

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

  • ベストアンサー
  • cocky
  • ベストアンサー率57% (232/402)
回答No.1

s/<(.*?)>//g; で消えませんか? また掲示板などでHTMLタグを無効化するのであれば、 s/</&lt;/g; s/>/&gt;/g; と変換して、HTMLタグをそのまま画面に表示させてしまう手もあります。

Atalia
質問者

お礼

ありがとうございました。 ちょっと余計なことをし過ぎていたようで、 仰る方法でうまくいきました。

その他の回答 (4)

noname#6448
noname#6448
回答No.5

えーーー、同じようなことをした経験あります。 $data = ~s#\"##g; $data = ~s#<.*>##g; 一部のタグを消したいときは $data = ~s#</p>##g; $dataはタグが入っています。  / ではなく # を使ったのは</p>を消したいときに \を付けるのがめんどうだったためです。 最後のgは$data内の<p>を全て消すという意味。 一行目で全ての、ダブルクォーテーション全部消去しました また、ソースが大文字か小文字か分からないので trコマンドを使って全て小文字にあらかじめしておきます

Atalia
質問者

お礼

ありがとうございました。

  • ykc
  • ベストアンサー率29% (28/95)
回答No.4

複数行に対処したいなら、$scalarなどに入力データを全部つなげておいて、s/<(.*?)>//g; でいいとおもいます。 あとはsplitで分解すれば、問題ないかと。 エンティティの無効化は、 %ent = ('&' => 'amp', '<' => 'lt', '>' => 'gt', '"' => 'quot'); と指定して、 s/([&<>"])/&$ent{$1};/g; ってやると、ちょっとかっこいいですよ。重たいですけど。

Atalia
質問者

お礼

ありがとうございました。 エンティティの無効化は目から鱗でした。

  • dany
  • ベストアンサー率35% (27/77)
回答No.3

みなさんが書かれている方法で普通は問題ないですが、厳密にいうと <!-- <br> -->  →  --> <foo bar=">"> → "> なんてことになるので、また別の方法があります。 詳しくは下記URLを参照してください。 勉強になるページです。激しくオススメ!

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm#Tag_Remove
Atalia
質問者

お礼

ありがとうございました。 ご紹介のページはとても参考になります。

  • cocky
  • ベストアンサー率57% (232/402)
回答No.2

何か半角文字だと見にくくなってしまったので、置換の内容だけ全角で書き直しますね。 上からそれぞれ s/<(.*?)>//g; s/</&lt;/g; s/>/&gt;/g; です。