アプリ版:「スタンプのみでお礼する」機能のリリースについて

Perlでの文字列置換についてうかがいます。

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

A 回答 (5件)

s/<(.*?)>//g;



で消えませんか?

また掲示板などでHTMLタグを無効化するのであれば、

s/</&lt;/g;
s/>/&gt;/g;

と変換して、HTMLタグをそのまま画面に表示させてしまう手もあります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/03/13 19:42

何か半角文字だと見にくくなってしまったので、置換の内容だけ全角で書き直しますね。



上からそれぞれ
s/<(.*?)>//g;
s/</&lt;/g;
s/>/&gt;/g;
です。
    • good
    • 0

みなさんが書かれている方法で普通は問題ないですが、厳密にいうと


<!-- <br> -->  →  -->
<foo bar=">"> → ">
なんてことになるので、また別の方法があります。

詳しくは下記URLを参照してください。
勉強になるページです。激しくオススメ!

参考URL:http://www.din.or.jp/~ohzaki/perl.htm#Tag_Remove
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/03/13 19:43

複数行に対処したいなら、$scalarなどに入力データを全部つなげておいて、s/<(.*?)>//g; でいいとおもいます。


あとはsplitで分解すれば、問題ないかと。

エンティティの無効化は、
%ent = ('&' => 'amp', '<' => 'lt', '>' => 'gt', '"' => 'quot');
と指定して、
s/([&<>"])/&$ent{$1};/g;
ってやると、ちょっとかっこいいですよ。重たいですけど。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/03/13 19:45

えーーー、同じようなことをした経験あります。


$data = ~s#\"##g;
$data = ~s#<.*>##g;
一部のタグを消したいときは
$data = ~s#</p>##g;
$dataはタグが入っています。

 / ではなく # を使ったのは</p>を消したいときに
\を付けるのがめんどうだったためです。
最後のgは$data内の<p>を全て消すという意味。
一行目で全ての、ダブルクォーテーション全部消去しました
また、ソースが大文字か小文字か分からないので
trコマンドを使って全て小文字にあらかじめしておきます
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/03/13 19:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!