- ベストアンサー
Perlでの文字列置換に関して
Perlでの文字列置換についてうかがいます。 文字列中からHTMLタグを排除しようと思うのですが、 タグ部分のみをうまく指定することができず、困っています。 どうか御知恵をお貸し下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
s/<(.*?)>//g; で消えませんか? また掲示板などでHTMLタグを無効化するのであれば、 s/</</g; s/>/>/g; と変換して、HTMLタグをそのまま画面に表示させてしまう手もあります。
その他の回答 (4)
えーーー、同じようなことをした経験あります。 $data = ~s#\"##g; $data = ~s#<.*>##g; 一部のタグを消したいときは $data = ~s#</p>##g; $dataはタグが入っています。 / ではなく # を使ったのは</p>を消したいときに \を付けるのがめんどうだったためです。 最後のgは$data内の<p>を全て消すという意味。 一行目で全ての、ダブルクォーテーション全部消去しました また、ソースが大文字か小文字か分からないので trコマンドを使って全て小文字にあらかじめしておきます
お礼
ありがとうございました。
- ykc
- ベストアンサー率29% (28/95)
複数行に対処したいなら、$scalarなどに入力データを全部つなげておいて、s/<(.*?)>//g; でいいとおもいます。 あとはsplitで分解すれば、問題ないかと。 エンティティの無効化は、 %ent = ('&' => 'amp', '<' => 'lt', '>' => 'gt', '"' => 'quot'); と指定して、 s/([&<>"])/&$ent{$1};/g; ってやると、ちょっとかっこいいですよ。重たいですけど。
お礼
ありがとうございました。 エンティティの無効化は目から鱗でした。
- dany
- ベストアンサー率35% (27/77)
みなさんが書かれている方法で普通は問題ないですが、厳密にいうと <!-- <br> --> → --> <foo bar=">"> → "> なんてことになるので、また別の方法があります。 詳しくは下記URLを参照してください。 勉強になるページです。激しくオススメ!
お礼
ありがとうございました。 ご紹介のページはとても参考になります。
- cocky
- ベストアンサー率57% (232/402)
何か半角文字だと見にくくなってしまったので、置換の内容だけ全角で書き直しますね。 上からそれぞれ s/<(.*?)>//g; s/</&lt;/g; s/>/&gt;/g; です。
お礼
ありがとうございました。 ちょっと余計なことをし過ぎていたようで、 仰る方法でうまくいきました。