文字クラスに関して
文字クラスとして、[1-3]とか[w-y]とかできるかな?
今まで文字クラスとして[0-9]や[0-9a-zA-Z_]などを学んだけど、[3-5]とか[w-y]とか行けるのかな?やってみた。
my @filename = ('hoge_3.log', 'hoge_4.log', 'hoge_5.log', 'hoge_6.log'); foreach (@filename) { print "$_ : "; if ($_ =~ /hoge_[3-5]\.log/) { print "Match!\n"; } else { print "Not match.\n"; } } my @name = ('pw', 'px', 'py', 'pz'); foreach (@name) { print "$_ : "; if ($_ =~ /p[w-y]/) { print "Match!\n"; } else { print "Not match.\n"; } }
アルファベットじゃなくても大丈夫?
さらに疑問。[0-9]の-って、文字クラスの中で範囲を表すメタ文字なんだと思う。Zとaの間のASCIIコードは以下の通りになっている。
code | char |
---|---|
91 | [ |
92 | \ |
93 | ] |
94 | ^ |
95 | _ |
96 | ` |
/[a-z]/に倣って、/[\[-`]/とかできるのかな?範囲がASCIIコードに基づくと勝手に推測してやってみる。
my @ch = qw(Z [ \ ] ^ _ ` a); foreach (@ch) { print "$_ : "; if ($_ =~ /[\[-`]/) { print "Match!\n"; } else { print "No match.\n" } }
おー、いけた!http://ideone.com/O2Umk
適当にASCIIコードでやってみたけど、範囲はどういう風に決められているんだろう?unicodeとかいうの?よくわからない。