Perlのすべてがここにある!

Perl:文字列を切り出すには?substr関数の使用方法

やまぐち

やまぐち

開発エンジニア/Perl/PHP/リーダー/ボールド歴4年

substr関数は、指定した位置から部分文字列を切り出す時に使用します。正規表現や配列に文字列を格納する方法など、Perlで文字列を操作する方法はたくさんありますが、文字列内の特定の場所を切り出す、あるいは置換する場合は、substr関数を利用すると便利です。


1.基本的な使い方

substr関数の基本構文は下記の通りです。

基本構文

substr (EXPR , OFFSET [, LENGTH] [, REPLACEMENT])

文字列(EXPR)を元に、文字列の位置(OFFSET)から数えて 文字数(LENGTH)分の部分文字列を抜き出して返します。文字列の先頭は『OFFSET = 0』となります。もしOFFSETが負の値だった場合、文字列の最後から数えた OFFSET の位置が『開始位置』です。LENGTHが省略された場合、開始位置から文字列の最後までを返します。もし LENGTH が負の値であれば、文字列の最後から LENGTH で指定した文字数分を除いた部分文字列を返します。文字列(REPLACEMENT)を指定すると、EXPRの取り出された部分をREPLACEMENTで置換します。

【参考】

文字列の位置(OFFSET)は下記の図のような数値で指定されます。文字列操作では操作開始位置であるOFFSET値が重要になりますので、しっかり理解しましょう。

fig.文字列ののOFFSET値の例
fig. 文字列のOFFSET値の例

では、いくつかサンプルを使って動作を確認してみましょう。


2.使用例

2-1.OFFSET値:正、LENGTH値:正の場合

サンプル1
my $string = 'abcdefg';
print substr($string, 3, 2);

[実行結果]
de

このカタチが一般的な使用方法であると思います。‘abcdefg’という文字列の3番目の位置(OFFSET)から2文字分の長さ(LENGTH)を切り取ります。従って部分文字列として‘de’が返されます。

2-2.OFFSET値:負、LENGTH値:正の場合

サンプル2
my $string = 'abcdefg';
print substr($string, -4, 3);

[実行結果]
def

この場合、開始位置(OFFSET)が負の値-4ですから、最後から数えて4番目の位置から3文字分の文字列が切り出されます。従って、返される部分文字列は‘def’となります。

2-3.OFFSET値:正、LENGTH値:省略の場合

サンプル3
my $string = 'abcdefg';
print substr($string, 3);

[実行結果]
defg

切り出す長さ(LENGTH)が省略されている場合、3番目の位置(OFFSET)から最後までが切り出す対象になります。返される部分文字列は‘defg’です。

2-4.OFFSET値:正、LENGTH値:負の場合

サンプル4
my $string = 'abcdefg';
print substr($string, 3, -2);

[実行結果]
de

この場合、開始位置(OFFSET)が3ですから、まず3番目の‘d’から最後までの文字列‘defg’を対象と考えます。そして切り取る長さ(LENGTH)が-2ですから、先ほど対象とした‘defg’の最後から2文字分を取り除き、残った文字列‘de’を返します。

2-5.置換する場合(その1

サンプル5
my $string = 'abcdefg';
print substr($string, 3, 2, 'DE');
print $string;

[実行結果]
de
abcDEfg

最後にsubstr関数で置換するやり方です。まず開始位置(OFFSET)が3ですから、3番目の位置から2文字分の長さ(LENGTH)を切り取った文字列‘de’が返されます。次に置換する文字列(REPLACEMENT)が指定されていますから、元の文字列‘abcdefg’から切り取った文字列‘de’の部分を、置換する文字列‘DE’に置き換えます。substr関数の戻り値は‘de’、元の文字列‘abcdefg’が‘abcDEfg’に置換される点に注意しなければなりません。また置換された文字列‘abcDEfg’は、スクリプトが終了するまで保持されます。

2-6.置換する場合(その2

サンプル6
my $string = 'abcdefg';
substr($string, 3, 2) = 'DE';
print $string;

[実行結果]
abcDEfg

substr関数を使用したもう一つの置換の方法として、左辺値への代入の対象とすることで部分文字列の置き換えや追加などが可能となります。


3.さいごに

このように、substr関数を使えば簡単に文字列の一部を切り出すことができます。これらのサンプルを元に、みなさんも多様な文字列処理に活用してみてください。

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

  • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
  • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

公式アカウントLINE限定!ボールドの内定確率が分かる無料診断実施中
公式アカウントLINE限定!
ボールドの内定確率が分かる無料診断実施中