文字列処理函数

last-modified: 29th/July/'01;
since: 1st/June/2001;

前節では基本的なハッシュの使い方を見てきました。本節ではハッシュを処理するために必要な文字列処理の函数をまとめて紹介します。

文字列操作の基本は検索と置換です。従って、 m/.../s/.../ を利用すれば全て実現できます。しかし、 Perl では便利な機能が簡単に実現できる組み込み函数が沢山用意されています。

これらの函数の利用に慣れると共に、検索と置換でどのように再現するかも考えてみると勉強になります。

split, join

#【join の基本書式】
$value = join("区切り文字列", 配列);
#join の利用例
$value = join(" ]:[ ", a, b, c);	#$value = "a ]:[ b ]:[ c"
#【split の基本書式】
@array = split(/正規表現/, 文字列);
#split の利用例
@array = split(/:/, "a ]:[ b ]:[ c");	#@array = ("a ]", "[ b ]", "[ c")
@array = split(/ ]:[ /, "a ]:[ b ]:[ c");	#@array = ("a", "b", "c")

詳しくは配列操作を参照ください。

chomp

何度も使ってきましたが、文字列の最後の改行文字(\n)を削除します。改行文字が含まれていない場合は何もしません。

配列やリストに対しては、個々の要素全てに対して chmod を作用します。スカラーコンテキストでは、削除した改行文字数です。

$string = "hogehoge\n";
chomp $string;
    #$string = "hogehoge" になる。
    #chomp($string = "hogehoge\n") としても同じ。
@array = ("hogehoge", "foo\n", "hoo", "piyo\n");
$i = chomp @array;
    #@array = ("hogehoge", "foo", "hoo", "piyo") になる。
    #$i = 2 になる。

length

文字列の長さをバイト数で返します。

ファイルに対する入出力時などにデータのバイト数を求めて、このバイト数だけ読み込んだら読み込みを終了するように工夫すると良いでしょう。実際は、 substr や パターンマッチなどと併用します。

$string = "こんにちは。";
$size = length $string;
    #$size = 12 になる。日本語は 2 バイト文字。

substr

文字列の任意の部分の文字列を返します。 splice と同様に文字列を挿入することもできます。

#【substr の基本書式】
$sub_string = substr(string, offset, length);
#利用例
$string ="I have a dream.";
$a = substr($string, 3, 4);
        #$a = "ave " になる。
$b = substr($string, -4,3);
        #$b = "eam" になる。
$c = substr($string, 0, 6);
        #$c = "I have" になる。
$d = substr($string, 7);
        #$c = "a dream." になる。
substr($string, 9, 0) = "BIG ";
        #$string = "I have a BIG dream." になる。
substr($string, -5,4) = "car";
        #$string = "I have a BIG car." になる。

index, rindex

index は、文字列から、パターンにマッチする部分の最初の位置をバイト数で返します。逆に、 rindex は最後の位置を返します。

#【index の基本書式】
$position = index(string, substring, offset);
#利用例
$position = index("Howdy, world!", "H");
        #$position = 0 になる。
$position = index("Howdy, world", "o");
        #$position = 1 になる。
$position = index("Howdy, world!", "o", 3);
        #3 バイト目以降の "o" は 8 バイト目だから、
        #$position = 8 になる。

全ての部分文字列をヒットさせる場合は、 offset にカウントのための変数をおいて、 while ループさせるのが良いでしょう。

実際には、 substr, length などと併用します。

Copyright: SUGAI, Manabu. Since: 2001
FC2> モビット