正規表現の演習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"; }
これでいよいよ次回の更新では、念願のコードを完成させることが出来ます! というか、こんな簡単な処理にどんだけかけてんだ……。