memo460 : Perl正規表現

Created Thu Apr 14 11:29:42 2011
Last Modified Thu Apr 14 11:44:06 2011

*#1 Thu Apr 14 11:29:42 2011 / Thu Apr 14 11:44:06 2011

*こういうのを会社から書くようになったらもう末期

数字のみからなる文字列に対してカンマ打ちをやりたい。正規表現で。
例:
12345678->12,345,678

さてこの"カンマ打ち"、具体的には何をやれと要求すればよいのか。
1) おしりから始めて、数字3つごとにカンマを打つ
2) ただし、カンマの前には必ず数字が必要

1)の条件を読み替える:
1')数字を3つごとに区切っていくとちょうどおしりで区切りになる場合、その区切り位置(おしり以外)にカンマを打つ

この1'), 2)の条件を具体的な正規表現にするとこうなる:
s/(?<=\d)(?=(\d{3})+$)/,/g

\dは数字(0-9)1文字を表すおなじみの特殊文字。
(?~~~) というのはPerlの拡張正規表現。
(?<=...)が条件2), (?=...)が条件1')に対応する。
(?<=[])は、その位置の*直前*に正規表現[]が存在すること、
(?=[])は、同様にその位置の*直後*に正規表現[]が存在することを要求する。
(\d{3})は、数字が3つ({3})連続していることを表現する。
(\d{3})+とすることで、数字3つの区切りが1回以上連続していることになる。
$は文末。

*しかし本当に見づらい。ちゃんと手を入れたい。
*夏休みぐらいまではこのサイト消さないでほしいなあ
*俺に夏休みがあるかどうかについては諸説あるのだが。


*Linked from: