From: Tatsuaki Nagai Date: 2001-10-25T11:17:47+09:00 Subject: [ruby-list:32047] Re: コメント削除スクリプト 永井@KCです。 >def delete_comment(src) > src.gsub(/\G([\'\"])(?>\\.|.)*?\1|(\/\*.*?\*\/)|(\/\/)[^\n]*?$/m) { > if $2 > s = $2.delete("^\n") > s = ' ' if s.empty? > s > elsif $3 > '' > else > $& > end > } >end > >ARGV.each {|file| > print delete_comment(open(file) {|f| f.read}) >} 上のマッチング処理は  (1)文字列中はマッチング対象からはずす  (2)/**/をマッチング  (3)//をマッチング というふうになっていると思いますが、(1)の正規表現がさっぱりわからないので、 教えてください。 ・\Gは「前回マッチした箇所(の直後)にマッチ (幅を持たない)」とマニュアル にありますが、具体的にどういう考えで使われているのでしょうか。 ・?>を使ってバックトラック抑止を行っていますが、なんのために必要なのでしょ うか。 ・\1というのはマニュアルを調べても載っていなかったのですが、どういう コマンドですか。 質問が多くて申し訳ないですがよろしくお願いします。 後、(3)のマッチングで(\/\/)[^\n]*?$となっていますが(\/\/)[^\n]*$としても 変わらないように思うのですが…。