• 締切済み

ダブルクォートで囲まれた文字列の取り出し

Windows環境でRuby 1.8.7を使用しております。 ----sample1.txt----- hoge"foo\"bar\"foo"hage"bar\"baz\"bar"hoge ------------------ ファイルから1行ずつテキストを読み込んで処理を行います。上のsample.txtの様な行を読み込んだ場合にダブルクォートで囲まれた部分 foo\"bar\"foo bar\"baz\"bar を取り出すのにはどの様な正規表現を用いればよろしいでしょうか? エスケープされたダブルクォートを除ける上手い方法がわかりません。 また、ダブルクォートで囲まれた部分が複数行にまたがる場合はどの様に処理をすれば良いでしょうか? -----sample2.txt----- hoge"foo \"bar\" baz" hage ---------------------- -----sample3.txt----- hoge"foo \"ba r\"baz" hage ---------------------- 最初の例のように1行の場合は File.foreach(file) do | line | …… end で良いのですが、複数行の場合には同じように単純には行きません。 ダブルクォートの数を数えて、奇数の場合は偶数になるまで次行をくっつける様な処理を考えているのですが、もっと適切な方法はありますか? 宜しくお願いします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

前者については "((?:[^\\"]|\\.)*)" にマッチさせればいいと思う. 後者は「全体を 1つの文字列にする」のが最も単純ではないでしょうか.

siffon9
質問者

お礼

ご回答ありがとうございました。 前者の正規表現はこれで上手くいっているようです。何故上手くいくのか頭を捻る必要がありますが…… 後者についてですが、全体をまとめるというのは行いたくないのです。 理由は、巨大なファイルを読むとメモリ不足で落ちることが以前あったということと、同時に他の処理を基本1行ずつで行いたいということからです。

関連するQ&A