文字クラスに関して

文字クラスとして、[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";
  }
}

できた!http://ideone.com/Bbor2

アルファベットじゃなくても大丈夫?

さらに疑問。[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とかいうの?よくわからない。