Perl言語プログラミングレッスン[入門編] 第7章
いきなりsplitと正規表現の使い方でおぉ、となる
my @number = split (/\D+/, '31 and 41, 592 and 653'); print join (',' , @number); #31,41,592,653
- なるほど、正規表現の
\D+
、つまり数字以外を区切り文字にする訳か。なるほど。つまり次の一文で'300yen'や'168cm'、それに'58kg'のような文字列を探せる訳です。
my @found = grep (/\D+[a-z]+/ , @word);
- 夢広がるなぁ。
Perlの * は何でもマッチではない
- 直前の1文字が対象になる。
- コマンドラインの感覚で「なんにでもマッチする」と思ってた。
むむむ
[^5\D]
- 5以外の数字にマッチ
- [^5]
これで5以外ってのは分かる
- [\D]
これだと、数字以外ってことになる
- 組み合わせるとなぜ「5以外の数字」ってなるんだ?
- 5以外の数字、という条件をあとの\Dが上書きして数字以外ってならない?ならないのか。
練習問題7-4
use strict; use warnings; my @rhymes = ( "Humpty Dumpty sat on a wall,", "Humpty Dumpty had a great fall;", "All the king's horses, and all the king's men", "Cannot put Humpty Dumpty together again.", ); my $song = join( ',', @rhymes ); $song =~ s/(\,{1,2}|\;|\.)/ /g; my @words = split( /\s+/, $song ); my $count; for my $i (@words) { if ( $i =~ /[A-Z]/ ) { $i =~ tr/[A-Z]/[a-z]/; } $count->{$i}++; } for my $i ( sort { $a cmp $b } keys $count ) { print $i . " " . $count->{$i}, "\n"; }