split関数:文字列を指定のパターンで分割する

Perl で用意されている組み込み関数の一つである split 関数の使い方です。 split 関数は対象となる文字列を指定のパターンで分割します。

(Last modified: )

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

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

split
split(/PATTERN/[,EXPR[,LIMIT]])
指定したパターンに従って文字列を分割します。分割した各文字列は
リストとして取得します。

パラメータ:
  /PATTERN/ 分割パターン文字列
  EXPR  対象の文字列
  LIMIT  分割の最大数
戻り値:
  分割された文字列を要素とするリスト

1 番目の引数には文字列を分割するためのパターンを指定します。パターンは正規表現を使って指定します。パターンを省略した場合は 1 個以上の空白文字(スペース、タブ、改行)を表す /\s+/ を指定した場合と同じです。( Perl の正規表現については「Perlにおける正規表現」を参照されてください)。

省略可能な 2 番目の引数には対象となる文字列を指定します。省略した場合にはデフォルト変数の $_ が指定されたものとして扱われます。

省略可能な 3 番目の引数には最大分割数を指定します。分割が指定した最大数に達すると、それ以上の分割は行われません。省略された場合は無制限となります。

具体的には次のように記述します。

my $str = "My name is Gotou.";
my @strlist = split(/ /, $str);

上記の場合は "My", "name", "is", "Gotou." の 4 つの要素に分割されます。

分割数を取得する

split 関数の戻り値をリストではなく値として受け取るように記述した場合は、分割された要素の数を取得します。例えば次のように使用します。

my $str = "My name is Gotou.";
my $count = split(/ /, $str);

上記の場合は分割された個数である 4 が取得できます。

※ただし現在この使用方法は推奨されていないようですので注意して下さい。

サンプルコード

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

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

my $str = "My name is Gotou.";
print "$str\n";

print "----\n";

my @list = split(/ /, $str);
foreach my $parts(@list){
  print "$parts\n";
}

print "----\n";

@list = split(/ /, $str, 2);
foreach my $parts(@list){
  print "$parts\n";
}

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

perl sample.pl

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

split関数:文字列を指定のパターンで分割する(1)

対象の文字列をパターンとして空白を指定して分割しました。また同じ文字列に同じパターンで最大分割数として 2 を指定して分割しました。

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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