PHPにおける "substr" 関数:文字列操作をマスターしよう


PHPにおける "substr" 関数:文字列操作をマスターしよう

基本構文

substr 関数の基本的な構文は以下の通りです。

substr(string, start, length)
  • string: 処理対象の文字列
  • start: 切り出しを開始する位置。0 から始まるオフセットで指定します。負の値を指定すると、文字列の末尾から数えます。
  • length: 切り出す文字数。省略可能。省略すると、start から文字列の末尾まで切り出します。

$str = "Hello, world!";

// 文字列の先頭 5 文字を切り出す
echo substr($str, 0, 5); // 結果: "Hello"

// 文字列の末尾 4 文字を切り出す
echo substr($str, -4);   // 結果: "orld!"

// "world" のみ切り出す
echo substr($str, 7, 5); // 結果: "world"

文字列の先頭・末尾からの切り出し

substr 関数は、負の値を start パラメータに渡すことで、文字列の末尾から切り出すことができます。これは、文字列の末尾にある特定の部分を取得したい場合に役立ちます。

$str = "Goodbye, world!";

// 文字列の末尾 3 文字を切り出す
echo substr($str, -3);   // 結果: "ld!"

// 末尾から 5 文字目までの文字列を切り出す
echo substr($str, -5, 3); // 結果: "!or"

エンコーディングとマルチバイト文字

substr 関数は、バイト単位で文字列を処理します。そのため、マルチバイト文字を含む文字列を扱う場合は、文字エンコーディングに注意する必要があります。

mb_substr 関数は、マルチバイト文字を考慮した substr 関数の代替バージョンです。こちらは、文字数ではなく、コードポイント単位で文字列を処理します。コードポイントは、1 つの文字を表すために必要なバイト数です。

$str = "こんにちは世界";

// 先頭 3 文字を切り出す (3 バイト)
echo substr($str, 0, 3);   // 結果: "こ" (1 文字)

// 先頭 3 文字を切り出す (6 バイト)
echo mb_substr($str, 0, 3); // 結果: "こんにちは" (3 文字)

substr 関数は、様々な用途に使用することができます。以下に、いくつかの例を紹介します。

  • 特定のパターンを含む部分文字列を切り出す
  • 文字列から不要な部分を削除する
  • 文字列を固定の長さにフォーマットする


$str = "Hello, world!";

// "world" を含む部分文字列を切り出す
$pos = strpos($str, "world");
if ($pos !== false) {
    $substr = substr($str, $pos, strlen($str) - $pos);
    echo "部分文字列: $substr"; // 結果: 部分文字列: world!
} else {
    echo "'world'が見つかりませんでした";
}

この例では、substr 関数を使用して、文字列の先頭と末尾の空白文字を削除します。

$str = "  Hello, world!   ";

// 先頭と末尾の空白文字を削除
$trimmed_str = trim($str);

// 削除後の文字列を表示
echo $trimmed_str; // 結果: Hello, world!

この例では、substr 関数を使用して、文字列を固定の長さにフォーマットします。文字列が長すぎる場合は切り捨て、短すぎる場合は空白文字で右端揃えにします。

$str = "123456789";
$fixed_length = 10;

// 文字列を固定の長さにフォーマット
$formatted_str = substr($str, 0, $fixed_length);
if (strlen($str) < $fixed_length) {
    $formatted_str = str_pad($formatted_str, $fixed_length, " ", STR_PAD_RIGHT);
}

// フォーマット後の文字列を表示
echo $formatted_str; // 結果: 1234567890

マルチバイト文字を含む文字列の処理

この例では、mb_substr 関数を使用して、マルチバイト文字を含む文字列から先頭 3 文字を切り出します。

$str = "こんにちは世界";

// 先頭 3 文字を切り出す (3 コードポイント)
$substr = mb_substr($str, 0, 3);
echo $substr; // 結果: こんにちは


"substr" 関数の代替方法

mb_substr() 関数は、substr() 関数のマルチバイト文字対応版です。substr() 関数はバイト単位で文字列を処理する一方、mb_substr() 関数はコードポイント単位で処理するため、マルチバイト文字を含む文字列を扱う場合に適しています。

$str = "こんにちは世界";

// 先頭 3 文字を切り出す (3 コードポイント)
$substr = mb_substr($str, 0, 3);
echo $substr; // 結果: こんにちは

str_split() 関数と array_slice() 関数

str_split() 関数は、文字列を個々の文字に分けて配列に変換します。array_slice() 関数は、配列の一部を切り出すことができます。これらの関数を組み合わせることで、substr() 関数と同様の機能を実現することができます。

$str = "Hello, world!";

// 文字列を配列に変換
$chars = str_split($str);

// 先頭 5 文字を切り出す
$substr = array_slice($chars, 0, 5);

// 切り出した文字を連結して文字列にする
$result = implode("", $substr);
echo $result; // 結果: Hello

正規表現

正規表現を使用して、文字列の一部を切り出すこともできます。この方法は、より複雑なパターンで文字列を切り出す場合に有効です。

$str = "Hello, world!";

// 先頭から "world" までを切り出す
$pattern = "/^.*?(world!)$/";
preg_match($pattern, $str, $matches);
if ($matches) {
    $substr = $matches[1];
    echo $substr; // 結果: world!
} else {
    echo "パターンが見つかりませんでした";
}

専用ライブラリ

substr() 関数の代替となる機能を提供するライブラリもいくつかあります。これらのライブラリは、より高度な機能や、substr() 関数では実現できない機能を提供する場合があります。

どの代替方法を選択すべきか