文字列から数字を抜き出す


Perlで文字列から数字を抜き出すのはこんな感じか?

#!/usr/bin/perl
use strict;
use warnings;

my $DIGITS = '(\d+)';
my @pieces;

# 文字列を数字と数字以外に分ける。
@pieces = split(/$DIGITS/, '123a4bcd56e');
print join(", ", map{"'$_'"} @pieces), "\n";
#=> '', '123', 'a', '4', 'bcd', '56', 'e'

# 文字列から数字を抜き出す。
@pieces = map{/$DIGITS/g} '123a4bcd56e';
print join(", ", @pieces), "\n";
#=> 123, 4, 56

目からウロコ

http://d.hatena.ne.jp/s-n-k/20080630/1214836026

必ず偶数番目に数値がくるっていうのが目からウロコ


Rubyでもやってみる。おお、確かに目からウロコ。

RUBY_VERSION
#=> "1.8.6"

DIGITS = /(\d+)/
pieces = '123a4bcd56e'.split(DIGITS)
#=> ["", "123", "a", "4", "bcd", "56", "e"]
pieces = 'abc123a4bcd56'.split(DIGITS)
#=> ["abc", "123", "a", "4", "bcd", "56"]


文字列から数値を抜き出すのはこんな感じか。

RUBY_VERSION
#=> "1.8.6"

DIGITS = /\d+/
pieces = '123a4bcd56e'.scan(DIGITS).map{|i| i.to_i}
#=> [123, 4, 56]
pieces = 'abc123a4bcd56'.scan(DIGITS).map{|i| i.to_i}
#=> [123, 4, 56]

勉強になった。