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回以上連続していることになる。
$は文末。
*しかし本当に見づらい。ちゃんと手を入れたい。
*夏休みぐらいまではこのサイト消さないでほしいなあ
*俺に夏休みがあるかどうかについては諸説あるのだが。
*
Link to:
*
Linked from:
memo460 : Perl正規表現
*#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回以上連続していることになる。
$は文末。
*しかし本当に見づらい。ちゃんと手を入れたい。
*夏休みぐらいまではこのサイト消さないでほしいなあ
*俺に夏休みがあるかどうかについては諸説あるのだが。
*Link to: