文字列の検索、置換、変換

Perlは文字列の操作に優れた言語です。文字列の検索、置換などの操作が基本的な命令として準備されています。

文字列の検索(パターンマッチ)

特定の文字列を検索することができます。検索する対象は$_という変数です。つまり、検索したい対象となる文字列をあらかじめ変数$_に代入してから検索することになります。検索するときには、マッチ演算子(「m//」または「//」)を用います。マッチ演算子は次の形をしています。

m/パターン/修飾子

パターンは検索する文字列です。文字列または変数または正規表現のいずれかで指定します。

修飾子は検索方法を指定します。必要のない場合には省略できます。

マッチ演算子で得られる結果は、検索が成功した場合は、失敗した場合はになります。

例 文字列の検索を行うプログラム

プログラム

#!/usr/local/bin/perl

$_="Hello, World!"; # 検索対象を変数$_に代入

if ( m/Hello/ ) { # Helloを検索し、結果を表示
    print "真";
} else {
    print "偽";
};  

実行結果

このプログラムを実行すると「真」が表示されます。helloを検索するように変更した場合には、「偽」が表示されます。

文字列の置換

特定の文字列を検索し、検索した文字列を置換することができます。置換するときには、置換演算子(「s///」)を用います。置換演算子は次の形をしています。

s/パターン/置換する文字列/修飾子

パターンは検索する文字列です。文字列または変数または正規表現のいずれかで指定します。

置換する文字列は、検索して一致した文字列に対して置換する文字列を指定します。

修飾子は置換方法を指定します。一致するものすべてを見つける場合には、「g」を指定してください。必要のない場合には省略できます。

置換演算子で得られる結果は、置換した回数です。検索が失敗した場合はになります。

例 文字列を置換するプログラム

プログラム

#!/usr/local/bin/perl

$_="Hello, World!"; # 検索対象を変数$_に代入

s/Hello/Good morning/; # Hello を Good morning に置換

print $_; # 変数$_を表示。$_は省略可

実行結果

Good morning, World!

$_を使わずに置換したい場合には、=~を用います。

例 変数$testの文字列を置換するプログラム

プログラム

#!/usr/local/bin/perl

$test = 777;

$test =~ s/7/<IMG SRC="7.jpg">/g; # 文字列7を7.jpgのイメージタグに変換して$testに代入

print $test;

実行結果

<IMG SRC="7.jpg"><IMG SRC="7.jpg"><IMG SRC="7.jpg">

文字列の変換

文字の入れ替えをする場合には、s///演算子ではうまくできません。このような場合には、変換演算子(「tr///」または「y///」)を用います。変換演算子は次の形をしています。

tr/変換対象となる文字のリスト/変換する文字のリスト/修飾子

リストで指定した変換対象となる文字を対応する変換する文字で置き換えます。

修飾子は変換方法を指定します。必要のない場合には省略できます。

例 文字列の変換をするプログラム

プログラム

#!/usr/local/bin/perl

$_="Hello, World!"; # 検索対象を変数$_に代入

tr/a-zA-Z/A-Za-z/; # 英小文字と英大文字をすべて入れ替え

print $_; # 変数$_を表示。$_は省略可  

実行結果

hELLO, wORLD!

発展

正規表現を用いるとさらに高度な文字列の検索や置換が行えます。