perlで数値のカンマ編集

色々やり方はあると思いますが僕の場合
数値をカンマ編集する場合以下の様なコードを書きます。
(10年位昔にネット上で見たのが元になっています。)
当時は意味もわからず使っていましたが、今はそれなりに理解できるのでw
解説してみます。(o´ヮ`)
数値に12345678と指定すると結果は12,345,678となる
————————————————
$kingaku = “12345678”;
#カンマ編集
$kingaku =~ s/\G((?:^-)?\d{1,3})(?=(?:\d{3})+(?!\d))/$1,/g;
print $kingaku;
————————————————
正規表現の解説(多少わかってる人むき)
\Gは先頭文字または、gオプションでマッチングした結果の位置
(?:ホニャララ)はグループ化してマッチングするが後方参照の為の記録をしない。(つまり(括弧)でくくっていても$1とか$2で参照できない)
?は0個か1個あることを示す。
\d{1,3}は\dは数字を示すので[0-9]と同じ{1,3}は1個から3個あることを示す。つまり1桁から3桁の数字を示すことになる。
(?=ホニャララ)は前の単語に続いてマッチすることを示す。つまり、『aaa(?=ホニャララ)』の場合aaaホニャララならマッチする。
(?!ホニャララ)はホニャララで無ければしなければマッチするという否定式。
12345678の場合
1桁から3桁の数値、3桁の数字が複数、最後が数字ではない
12 345 678
というふうにマッチしてgの繰り返しオプションでカンマが付与されていく。

タグ :