はじめまして、もりやま@Thinkです。

 今、Perlで書かれたHTMLタグを除去するプログラムをRubyで書き直しているん
ですが、、正規表現の修飾子 g の部分でうまく解決できなくて困っています。

------------------------------------------------------------------
$text_regex = q{[^<]*};
$tag_regex_ = q{[^"'>]*(?:"[^"]*"[^"'>]*|'[^']*'[^"'>]*)*}; #'}}}}
$comment_tag_regex =
  '<!(?:--[^-]*(?:(?!--)-[^-]*)*--(?:(?!--)[^>])*)*(?:>|(?!\n)$|--.*$)';
$tag_regex = qq{$comment_tag_regex|<$tag_regex_>};

$result = '';
while ($str =~ /($text_regex)($tag_regex)?/gso) {
  last if $1 eq '' and $2 eq '';
  $result .= $1;
  $tag_tmp = $2;
  if ($tag_tmp =~ /^<(XMP|PLAINTEXT|SCRIPT)(?![0-9A-Za-z])/i) {
    $str =~ /(.*?)(?:<\/$1(?![0-9A-Za-z])$tag_regex_>|$)/gsi;
    ($text_tmp = $1) =~ s/</&lt;/g;
    $text_tmp =~ s/>/&gt;/g;
    $result .= $text_tmp;
  }
}

------------------------------------------------------------------

> $str に対するパターンマッチが行なわれている 2ヶ所とも に修飾子 g がつけ
> られていることに注目してください.修飾子 g をつけたパターンマッチをスカ
> ラーコンテキストで 行なうと,前回どこまでパターンマッチを行なったかを保
> 存しておいて,次回 その続きから検索を始めてくれます.このスクリプトでは
> 基本的にテキスト部分と タグ部分を 1つずつ探して while 文をまわしている
> のですが,XMPタグ,PLAINTEXTタグ, SCRIPTタグのときだけは 別処理をする必
> 要があります.その処理終了後 while 文に戻ったときには,その続きからパター
> ンマッチをしてもらう必要があります. このようなときに,$str に対するどち
> らのパターンマッチに おいても修飾子 g がつけられていますので,どちらの場
> 合も 都合よく続きからパターンマッチを始めることができるわけです. 

------------------------------------------------------------------
            (http://www.din.or.jp/~ohzaki/perl.htm#Tag_Remove より引用)

 これをRubyで書くにはどうすればいいでしょうか?

よろしくお願いします。

--------------------------------------------------------------------
URL     Cyber Heaven (Now restructuring...)
            http://hp.vector.co.jp/authors/VA015150/
e-mail  c-hawk / mtci.ne.jp
UIN     16186638
--------------------------------------------------------------------