[前][次][番号順一覧][スレッド一覧]

learn-ruby-in-kansai:90

From: "mbaba" <xml@t...>
Date: Fri, 3 Dec 2004 21:10:33 +0900
Subject: [learn-ruby-in-kansai:90] Re: 3桁コンマ

馬場@大阪です

高木さん、お世話になります。
>
> こんな風に書いてみたら、理解の助けになりますかね?
> gsub を使わないでsubで置換をloop 実行してみます。
>
> int_s = "12345678901
> while int_s.sub!(/(\d)(?=\d{3}+$)/, '\\1,') do
>         printf("before     : \"%s\"\n", $`)
>         printf("matched    : \"%s\"\n", $&)
>         printf("after      : \"%s\"\n", $')
>         printf("substituted: \"%s\"\n", int_s)
>         puts
> end
>
> 実行すると
>
> before     : "1"
> matched    : "2"
> after      : "345678901"
> substituted: "12,345678901"
>
> before     : "12,34"
> matched    : "5"
> after      : "678901"
> substituted: "12,345,678901"
>
> before     : "12,345,67"
> matched    : "8"
> after      : "901"
> substituted: "12,345,678,901"
>
> 最初にmatch しているのは、
> "2"とその右となりの隙間(幅を持たないマッチ)になります。
> (?=pattern)は、
> 先行先読み(lookahead assertion)と呼ばれるマッチングで
> $ や^ のように幅を持ちません。
よくわかりました^^;
(?=pattern)の部分はマッチの条件には入るけれども、
マッチした文字列としては取り扱われず、そこまで、マッチ開始位置が
動かない、、というイメージですよね?(うまくいえませんが^^;)

9桁の場合もやってみて、なるほど、とおもいました。

> このやり方がいちばん直感的にピンとこないですねー、わたしには。
>
> sub put_comma {
>   my $num = $_[0];
>   $num = reverse $num;
>   $num =~ s/(\d{3})(?=\d)(?!\d*\.)/$1,/g;
>   $num = reverse $num;
>   return $num
> }
>
> 隙間の連続使いで頭のパイプラインが一瞬stall します :-(
URLは(?=pattern)の説明がわりにわかりやすいかなーとおもって
掲載しました。(色分けされたりすると弱い^^;)
プログラム的には(?=pattern)が分かればレシピの方がずっと
わかりやすいですね。

小波せんせー
> PS:「小波先生」はやめてほしいなあ。軽く「小波せんせ」ぐらいが許
> 容限度です,はい。
はい、よろしくお願いします。

> 今日の午後,土曜日の勉強会に顔を出した3年の学生(一番後ろにいた
> おとなしい学生)に聞いてみたら,資料を出して議論していたのはよく
> わかってそれなりに勉強になったそうです。後の脱線談義は????
やっぱり資料があると、考えも集中しやすいですね。
問題となったとこ以外にも、いろいろとコードの勉強になって助かりました。

馬場幹彦


--
ML: learn-ruby-in-kansai@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

        81 2004-11-27 17:29 [babie7a0@y...       ] お疲れさま、サマリー作りましょう        
        82 2004-11-28 14:33 ┗[xml@t...            ]                                       
        83 2004-11-28 15:53  ┣[xml@t...            ] テキストの整形                      
        84 2004-11-28 16:08  ┃┣[xml@t...            ] 3桁コンマ                        
        89 2004-12-02 10:39  ┃┃┗[gollum@h...         ]                                 
->      90 2004-12-03 13:10  ┃┃ ┗[xml@t...            ]                               
        96 2004-12-03 17:22  ┃┗[babie7a0@y...       ]                                   
        98 2004-12-03 18:32  ┃ ┣[nov@y...            ]                                 
        99 2004-12-03 23:46  ┃ ┗[konami@k...         ]                                 
        85 2004-11-29 03:25  ┗[sakai-n@m...        ]