[過去ログ] Regular Expression(正規表現) Part13©2ch.net (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
593
(5): 2016/03/07(月)14:11 ID:oj83hPpT(1/5) AAS
# .*? の、? は最短マッチ
str = File.read('File1').gsub(/^=begin.*?^=end/m, '')

=begin
複数行コメント
=end

Rubyで、行頭=begin 〜 行頭=end で囲んだ、複数行コメントの部分を、複数行の最短マッチで削除したいのですが、=end の同じ行内で、
後ろに書いた、改行以外の部分もついでに削除したい。以下の ' ABC'

=begin
複数行コメント
=end ABC
595: 593 2016/03/07(月)14:43 ID:oj83hPpT(3/5) AAS
>>593 自己レス

# .*? の、? は最短マッチ
str = File.read('File1').gsub(/^=begin.*?^=end/m, '#')

str.gsub!(/^#.*$/, '')

元々、行頭が # の行も削除するので、
いったん、複数行コメントの部分を、# に置換してから、
行頭が # の行を削除するようにした

=begin
複数行コメント
=end ABC

これが、以下に置換される
# ABC
597
(3): 593 2016/03/07(月)18:33 ID:oj83hPpT(4/5) AAS
>596
# .*? の、? は最短マッチ
str = File.read('File1').gsub(/^=begin.*?^=end.*$/m, '')

複数行マッチで、$ を使ったら、ファイルの最後まで削除された。
以下で、' ABC' だけではなく、'123' も削除された。
たぶん、$ が機能しないで、無視される

=begin
複数行コメント
=end ABC

123
599: 593 2016/03/07(月)20:46 ID:oj83hPpT(5/5) AAS
>598
改行コードが、[\r\n]限定で、それで出来ました。
gsub(/^=begin.*?[\r\n]=end[^\r\n]+/m, '')

=begin
複数行コメント
=end ABC

123

これで、ABCも削除されて、123だけが残ります
603
(1): 2016/03/08(火)13:04 ID:810kd9as(1) AAS
>>596 に ? をつければ、要件を満たすでしょ?
つまり
/^=begin.*?^=end.*?$/m

>>597
> たぶん、$ が機能しないで、無視される
.* だと、123まで greedy に食べて、文の終わりで $ がマッチする

>>593
> 後ろに書いた、改行以外
と書いてはいるが、もし =end ABC の直後の改行まで含めるなら
/^=begin.*?^=end.*?(?:^|\z)/m
604: 593 2016/03/09(水)00:51 ID:t6r0Jvyr(1) AAS
>>602
難しそう

>>603
# .*? の、? は最短マッチ
gsub(/^=begin.*?^=end.*?$/m, '')

.*?$ で、最短マッチで、直後の行末に一致しました

=begin
複数行コメント
=end ABC

123

これで、123 だけが残ります
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.029s