文字列の検索
■この章で解説する組み込み関数
length, index, rindex
■この章でできること
・文字列の長さを取得する
・文字列中から部分文字列を検索する

 文字列の長さを取得するにはlength関数、文字列中から部分文字列を検索するにはindex、rindex関数を使います。

#!/usr/bin/perl

#############################################
# 文字列検索のサンプル
# Author: "Perl Programming Tips"
#############################################

$string1 = "abcdefdefdef\n";
$string2 = "あいうえ\n";

# 文字列の長さを取得
print "length1:" . length($string1) . "\n";
print "length2:" . length($string2) . "\n";

# 部分文字列を検索(先頭から)
print "index1:" . index($string1, "def") . "\n";

# 部分文字列を検索(5文字目から)
print "index2:" . index($string1, "def", 4) . "\n";

# 部分文字列を検索(2バイト文字の場合)
print "index3:" . index($string2, "うえ") . "\n";

# 部分文字列を検索(見つからない場合)
print "index4:" . index($string1, "ddd") . "\n";

# 部分文字列を後方検索(末尾から)
print "rindex1:" . rindex($string1, "def") . "\n";

# 部分文字列を後方検索(9文字目から)
print "rindex2:" . rindex($string1, "def", 8) . "\n";

 実行結果は次のようになります。

[g@630m pl]$ perl scalar02_01.pl
length1:13
length2:9
index1:3
index2:6
index3:4
index4:-1
rindex1:9
rindex2:6
[g@630m pl]$

 length関数は文字列のバイト数を返します。改行文字も含みます。2バイト文字の場合は1文字で2バイトになります。文字数ではないので注意が必要です。

length
文字列のバイト数を取得する。
書式
length val
引数
val:
文字列
戻り値
文字列のバイト数

 次は文字列から部分文字列を検索する方法です。index関数は文字列の先頭から、rindex関数は文字列の後方から検索します。それぞれ先頭の文字を0としたインデックス値を返します。2バイト文字の場合は1文字で2つのインデックスを使います。つまり、ここで取得または指定するインデックス値はバイト単位です。

index
文字列から部分文字列を検索する。
書式
index string, substr, [start]
引数
string:
検索対象の文字列
substr:
検索する部分文字列
start:
検索を開始するインデックス値
戻り値
先頭を0としたインデックス値。見つからない場合は-1。

rindex
文字列から部分文字列を後方から検索する。
書式
rindex string, substr, [start]
引数
string:
検索対象の文字列
substr:
検索する部分文字列
start:
検索を開始するインデックス値
戻り値
先頭を0としたインデックス値。見つからない場合は-1。