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() 関数では実現できない機能を提供する場合があります。
どの代替方法を選択すべきか