--- title: 『新版Perl言語プログラミングレッスン入門編』第7章・正規表現の基本 author: kazu634 date: 2008-02-18 url: /2008/02/18/_865/ wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3745;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Perl - Programming ---

 今日からは正規表現を頑張ってみます。基本的に正規表現のイロハは知っているので、Perlでどのように正規表現を使うのかを知ることが学習のメインポイントになると思っています。

追記:  基本だから、結構知っていることばっかりだったかも。

正規表現を用いて「マッチ」しているかどうかを調べる

 「=~」演算子を用いることで、「左辺の文字列が右辺のパターンに一致するかどうか」を調べます。

use strict;
use warnings;
my $str = 'yesterday';
if ($str =~ /yes/) {
print "Match!\n";
} else {
print "No Match!\n";
}

マッチした文字は変数 $& に格納される

use strict;
use warnings;
my $str = 'yesterday';
if ($str =~ /yes/) {
print "$& --- Match!\n";
} else {
print "No Match!\n";
}

このようにすると、変数 $& には「yes」が格納される。

正規表現の「?」

 直前にあるのが「あっても、なくても構わない」ことを示します。

マッチした文字列を置き換える

 「s///」を使うよ!

use strict;
use warnings;
my $str = "This is a cat. That is a cat, too.\n";
$str =~ s/cat/dog/;
print $str;

「s/cat/dog/」を使うと、最初にマッチしたcatだけを置換して、文字列の残りは無視されることに注意!ただし、次のようにすると全部置換してくれる。

use strict;
use warnings;
my $str = "This is a cat. That is a cat, too.\n";
$str =~ s/cat/dog/g;
print $str;