[#47501] Hash の制約について( Ruby1.8) — 上田佳寛 <ueda@...>
皆様はじめまして
8 messages
2010/10/01
[#47528] Ruby1.9.1 p430へのRDE インストールについて — eiichi_maekawa@...
5 messages
2010/10/07
[#47529] ruby1.9.2 にて、 IO#reopen で第2引数を省略したときにモードが引き継がれない — jugyo kohno <kkohno@...>
jugyo と申します
11 messages
2010/10/08
[#47562] Re: ruby1.9.2 にて、 IO#reopen で第2引数を省略したときにモードが引き継がれない
— "Y. NOBUOKA" <nobuoka@...>
2010/10/15
信岡です。
[#47563] SketchUpのRubyでwin32oleをrequireする方法について(質問)
— "yahata hisashi" <yahatah@...>
2010/10/16
Google SketchUpのRubyでwin32oleをrequireする方法について教えていただきたく
[#47564] Re: SketchUpのRubyでwin32oleをrequireする方法について(質問)
— Masaki Suketa <masaki.suketa@...>
2010/10/16
助田です。
[#47566] Re: SketchUpのRubyでwin32oleをrequireする方法について(質問)
— "yahata hisashi" <yahatah@...>
2010/10/16
助田 雅紀様
[#47567] Re: SketchUpのRubyでwin32oleをrequireする方法について(質問)
— Masaki Suketa <masaki.suketa@...>
2010/10/16
助田です。
[#47537] Excel用のxmlssファイルを作成するライブラリ exlap_c — "YOSHIIZUMI" <t-yoshiizumi@...>
吉泉といいます。
11 messages
2010/10/10
[#47575] Re: Excel用のxmlssファイルを作成するライブラリ exlap_c
— 染谷 康一 <kouichi_someya@...>
2010/10/18
吉泉さん
[#47547] 正規表現で困っています — 成田恭一[NWH] <ntnarita_prn@...>
Ruby初心者の成田と申します。
7 messages
2010/10/13
[#47578] Ruby1.9.2のRDocで定義が出力されないことがある — KANAI-Takashi <kanai@...>
こんにちは。
6 messages
2010/10/18
[#47579] Re: Ruby1.9.2のRDocで定義が出力されないことがある
— KANAI-Takashi <kanai@...>
2010/10/18
金井です。
[#47588] Re: [ruby-list:47579] Re: Ruby1.9.2のRDocで定義が出力されないことがある
— 青柳政聡 <masaakiaoyagi@...>
2010/10/22
44Gv44GY44KB44G+44GX44Gm44CB6Z2S5p+z44Go55Sz44GX44G+44GZ44CCCgrph5HkupXjgZXj
[ruby-list:47553] Re: 正規表現で困っています
From:
Seiichi Miyagawa <miyagawa@...>
Date:
2010-10-13 06:51:55 UTC
List:
ruby-list #47553
問題は解決したようですが、ちと悩んだので覚書として投稿しておきます。
まずは、scanは括弧をつけるとそこだけ返すので、
bodys =%Q[<SQL>1,4,10001,20101013,1300,1</SQL><br/><SQL>1,4,1001,20101013,1300,1</SQL>]
bodys.scan(%r"<SQL>(.*?)</SQL>"){|v| p v[0].split(',')}
で、subしなくても出来るなぁ、と思いましたが、
更にsplitも無しに出来ないのかなぁとしばらく悩みました。
個数が固定なら ずらずら並べて、
bodys.scan(%r"<SQL>(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)</SQL>"){|v| p v}
でも、これでは個数が変わったらアウトだし、rubyっぽくないのでsplitの方がまだまし。
それで、
bodys.scan(%r"<SQL>(?:([^,]+?),)*?([^,]*?)</SQL>"){|v| p v}
などと書いてみたのですが、これでは括弧の数だけしか取れません。
(?:([^,]+?),)*? では最後のマッチが残るだけで繰り返した分が無くなります。
多分、last_matchが括弧の数だけしか使われないのでしょう。
で、悩んだ末、先読みを使えばsplit無しで一応全部取り出せることは分りました。
一個ずつというのが欠点ですね。簡略化のためデータは整数だけとしてます。
bodys.scan(%r"(\d+?)(?=(?:,\d+?)*</SQL>)"){|v| p v}
まあ、悩まずにsplitしてしまうのが、データの区切りもハッキリするし、
多分速いだろうし、更に、分りやすくて良いと思います。