正規表現の演習2 〜後方参照〜

 正規表現には後方参照という機能があります(たぶん、この一文はかなり間違ってるのでしょうが、今回はこれでいかせてもらいます)。後方参照とは何か? というと、つまり正規表現で指定したパターンにマッチした部分の、ある部分を取り出す機能です。

 たとえばこういうことです。

my $text = "Sample.JPG";

$text =~ /(.*)\.JPG/;

print $1 //出力結果 Sample 

 正規表現でパターンを指定する際、後から抜き出したい部分をカッコで囲んでやれば、あとで$1という変数から取り出すことが出来ます。ちなみにカッコを二つ、三つと増やしてやっても、$2、$3から取り出すことが出来ます。

 これを利用すれば、ここで書いているファイル名の拡張子以外の部分を切り取る、が簡単にできちゃいます。というか、上の例でほとんど出来ていますが。

 下の例は、カレントディレクトリ内の".JPG"を拡張子とするファイルを抜き出し、配列に格納して表示するコードです。

use strict;
use warnings;

opendir(my $dh,"./");
my @files = readdir($dh);
closedir($dh);

my @files2;

foreach(@files){
  if($_ =~ /(.*).JPG/){
    push(@files2,$1);
  }
}

foreach(@files2){
  print $_."\n";
}

 これでいよいよ次回の更新では、念願のコードを完成させることが出来ます! というか、こんな簡単な処理にどんだけかけてんだ……。