dポイントプレゼントキャンペーン実施中!

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
で良いのですが、複数行の場合には同じように単純には行きません。
ダブルクォートの数を数えて、奇数の場合は偶数になるまで次行をくっつける様な処理を考えているのですが、もっと適切な方法はありますか?

宜しくお願いします。

A 回答 (1件)

前者については


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

ご回答ありがとうございました。
前者の正規表現はこれで上手くいっているようです。何故上手くいくのか頭を捻る必要がありますが……

後者についてですが、全体をまとめるというのは行いたくないのです。
理由は、巨大なファイルを読むとメモリ不足で落ちることが以前あったということと、同時に他の処理を基本1行ずつで行いたいということからです。

お礼日時:2009/08/31 18:27

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