substr関数:文字列の指定した範囲の部分文字列を取得または置換する

Perl で用意されている組み込み関数の一つである substr 関数の使い方です。 substr 関数は対象となる文字列の指定した範囲の部分文字列を取得または置換します。

(Last modified: )

substr関数の書式と基本的な使い方

substr 関数は次のように定義されています。

substr
substr(EXPR,OFFSET[,LENGTH[,REPLACEMENT]])
対象の文字列の部分文字列の取得をします。REPLACEMENTを指定した場合に
は該当の部分文字列を新しい文字列で置き換えます。

パラメータ:
  EXPR  対象の文字列
  OFFSET  文字位置
  LENGTH  文字の長さ
  REPLACEMENT  置換する文字列
戻り値:
  部分文字列

1 番目の引数には対象となる文字列を指定します。

2 番目の引数には文字列の中の位置を指定します。先頭の文字の位置は 0 です。位置に負の値を指定した場合、最後の文字を -1 として最後から先頭に向かった移動した位置となります(例えば -2 の場合は最後から数えて 2 番目の文字)。

Morningと言う文字の文字位置

 M  o  r  n  i  n  g
--------------------
 0  1  2  3  4  5  6
-7 -6 -5 -4 -3 -2 -1

省略可能な 3 番目の引数には文字の長さを指定します。文字の長さを省略した場合には最後の文字までとなります。また負の値を指定した場合には最後の文字を -1 として先頭に向かって指定した長さだけ戻った位置にある文字の前の文字までとなります。

Morningと言う文字に対してsubstr(1, 2)とした場合は or
Morningと言う文字に対してsubstr(1, -2)とした場合は orni

 M  o  r  n  i  n  g
--------------------
 0  1  2  3  4  5  6
-7 -6 -5 -4 -3 -2 -1

省略可能な 4 番目の引数には置き換える新しい文字列を指定します。置き換えの対象となるのは 1 番目から 3 番目の引数によって決定した部分文字列となります。この場合は 1 番目の引数そのものを置き換えるので、置きかえられた新しい文字列が格納できるように 1 番目の引数は文字列の値ではなく文字列が格納された変数を指定しなければなりません。

指定した範囲の部分文字列を取得するには次のように記述します。

print substr("morning", 2)."\n";
print substr("morning", -2)."\n";
print substr("morning", 1, 2)."\n";
print substr("morning", 1, -2)."\n";

指定した範囲の部分文字列を別の文字列に置換するには次のように記述します。

my $str = "morning";
substr($str, 2, -2, "START");
print "$str\n";

実行結果はこのあとのサンプルをみてください。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

print substr("morning", 2)."\n";
print substr("morning", -2)."\n";
print substr("morning", 1, 2)."\n";
print substr("morning", 1, -2)."\n";

my $str = "morning";
substr($str, 2, -2, "START");
print "$str\n";

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

substr関数:文字列の部分文字列を取得又は置換する(1)

文字列から指定した範囲の部分文字列を取得したり、指定した範囲の部分文字列を別の文字列に置換しました。

-- --

Perl で用意されている組み込み関数の一つである substr 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。