【PHP】substrとは?文字列を抜き出す方法を初心者向けにわかりやすく解説

はじめに

PHPを使って開発をしていると、文字列を切り取ったり一部を表示したりする場面に遭遇することがあります。
たとえば「ユーザー名だけを抜き出したい」「メッセージの最初の数文字だけを表示したい」など、実務でよくある要望です。

こうした文字列の部分取得を行うために、php substr という関数が使われることが多いです。
文字列の好きな位置から、好きな長さだけ取り出すことができます。

本記事では、まったくプログラミング経験のない方でもわかるように、php substr の基礎から使い方までを詳しく紹介していきます。
実際のコード例を見ながら一緒に学んでみましょう。

この記事を読むとわかること

  • php substr の基本的な構文と使い方
  • 実務で文字列を部分的に扱う際の具体的な活用例
  • 引数の違いによる挙動の変化
  • よくある疑問点と注意すべきポイント

php substrとは

php substr は、文字列の一部を切り取って返すための関数です。
「どこから取り出すか」と「どこまで取り出すか」を指定するだけで、簡単に部分的なテキストを抜き出せます。

たとえば、メールアドレスからドメイン部分だけを取得したり、商品コードの一部を抜き出したりする場面で役立ちます。
書式は以下のようになっています。

substr( string $string, int $start, ?int $length = null ): string
  • $string:対象となる文字列
  • $start:切り取りを開始する位置
  • $length:取り出す文字数(省略可能)

これを見ただけでは何だか難しそうに感じるかもしれません。
しかし、実際のサンプルを見るとイメージがつかみやすくなります。

部分的な文字列を取り出す基本的な書き方

まずは、簡単に文字列を切り出す方法を見ていきましょう。
以下では「Hello, World!」という文字列から「World!」の部分だけを抜き出す例を示します。

<?php
$text = "Hello, World!";
$result = substr($text, 7); 
echo $result; 
// 結果: World!

第3引数を使うパターン

先ほどの例では第3引数(取り出す長さ)を指定しませんでした。
ここでは第3引数を設定して、文字数をコントロールする方法を見ていきます。

<?php
$text = "Hello, World!";
$result = substr($text, 0, 5);
echo $result; 
// 結果: Hello

このように開始位置と取り出しの長さを指定すると、冒頭から5文字だけを抜き出せます。
もし長さを指定しない場合、指定した開始位置から文字列の末尾までが取得対象になります。

実務での活用シーン

実際の開発では、単に文字列を一部表示するだけでなく、さまざまな場面で php substr が役に立ちます。
ここでは、よくあるシーンをいくつか挙げてみましょう。

IDやコードの一部抽出

ユーザーIDや商品コードなど、同じパターンの文字列から必要な部分だけを抜き出すことがあります。
たとえば「ABC-12345」の「12345」の部分だけを表示したい場合などです。

<?php
$productCode = "ABC-12345";
$numericPart = substr($productCode, 4); 
echo $numericPart;
// 結果: 12345

このようにハイフンで区切られた文字列の後半だけを取り出すときに便利です。
また、複数の項目を連結した文字列から特定部分を解析する際にも活用できます。

長いテキストを省略表示

ブログの記事やメッセージなど、長い文字列を一部だけ切り取って表示したいことがあります。
たとえば、100文字を超える文章の先頭40文字だけを一覧画面で表示し、「続きを読む」のように誘導するケースです。

<?php
$longText = "PHPで文字列を操作するときに使われる関数としてよく知られているのがsubstrです。...";
$shortText = substr($longText, 0, 40);
echo $shortText . "...";
// 結果: PHPで文字列を操作するときに使われる関数としてよく...

このように、php substr を使えば「一部だけ切り取って表示し、残りは省略」するといった実務でよくある処理が簡単に書けます。

start引数に負の値を使う方法

実は php substr は、開始位置を負の値(マイナスの数字)にすることができます。
この場合、文字列の末尾から数えた位置を指定することになります。

<?php
$text = "Hello, World!";
$result = substr($text, -6); 
echo $result;
// 結果: World!

上記の例では -6 を指定しているため、末尾から6文字分を切り取ります。
「Hello, World!」は全部で13文字なので、その7文字目までが除外され、残り6文字が取得対象となります。

負の値を使うメリット

末尾付近のデータだけを簡単に取得したいときに、とても便利です。
たとえばファイル名から拡張子だけを取り出すときや、文字列の末端部分にだけ注目したいときに使えます。

<?php
$fileName = "photo.jpeg";
$extension = substr($fileName, -4); 
echo $extension;
// 結果: .jpeg

この書き方なら拡張子が4文字(「.jpg」や「.png」など)で終わる場合、一定の位置から取り出したいときに役立ちます。
ただし、拡張子の長さが異なるファイルに対しては別の対応が必要です。

length引数を負の値にする使い方

実は、第3引数にあたる $length にも負の値を指定できます。
文字列の部分を切り取る際、終了位置を末尾から数えたい場合に役立ちます。

<?php
$text = "ABCDEFGH";
$result = substr($text, 2, -3);
echo $result;
// 結果: CDE

上記の例では、開始位置が 2(0から数えて3番目の文字 = "C")で、長さを -3 としています。
これは結果的に末尾から3文字分を除いた範囲を切り取る挙動になります。

少し複雑に感じられるかもしれませんが、「どこから始めるか」と「どこまでで終わるか」を前と後ろからの座標で指定する イメージをもつと理解しやすいです。

注意点

文字列操作全般にいえることですが、php substr を使うときにはいくつか気をつけるポイントがあります。
ここでは、その中でも初心者の方が最初につまづきやすい点を挙げてみましょう。

マルチバイト文字への対応

php substr は英数字のような1バイト文字を扱うのには向いていますが、日本語のようなマルチバイト文字を扱う場合には注意が必要です。
文字化けや文字が途中で欠けることがあります。

こうした問題を回避したい場合は、mb_substr というマルチバイト文字用の関数を使用するケースが多いです。
ただし、こちらも設定が必要になるため、取り扱う文字種に応じて最適な方法を選ぶことが大切です。

英数字だけを扱うなら「substr」だけでも問題なく使えるでしょう。 日本語のようなマルチバイト文字を扱う場合は「mb_substr」を検討すると安心です。

lengthが大きい場合や負の値の挙動

lengthを指定しても、その文字列の長さより大きい場合には、単に末尾までが取得されます。
反対に大きな負の値を指定した場合などは、返される結果が空文字になることもあります。
開発中に「思ったような結果が得られない」と困ったときは、パラメータの数値を一度見直してみましょう。

具体例(前後の文字を制御する)

ここでは一つの具体例として、文章の前後をカットして中央部分だけを抜き出すケースを考えてみます。
たとえばログメッセージが長すぎるときに、中央付近の数十文字を抜き出して確認したいといった場面を想定してみましょう。

<?php
$log = "2025-01-01 12:34:56 INFO Start Process X: User=Tom, Action=Create, ID=9999, ...";
$startPos = 15; // ログ例として、中央付近を狙って開始位置を指定
$middleSection = substr($log, $startPos, 30);
echo $middleSection;
// 結果: 6 INFO Start Process X: User=Tom, A

このように php substr を使って、あえて中央部分だけに注目し、余計な文字列を除去して調査を進める方法もあります。
実務ではログ解析やデバッグで役立つでしょう。

よくある疑問

初心者の方が php substr を使うときに、次のような疑問を持つことがあります。

負の値が複雑だけど、本当に使う場面はあるの?

→ 末尾が何文字かで決まっているフォーマットを切り出す際に便利です。

文字列が短い場合、指定した開始位置が範囲を超えたらどうなる?

→ 結果は空文字になります。プログラムのロジックで適切に範囲をチェックすると安全です。

文字列の範囲外を指定して想定外の結果になると、ユーザーに誤った情報を見せる可能性があります。
アプリケーションの要件に合わせて、文字数をチェックする仕組みを入れることをおすすめします。

このように、呼び出し時のパラメータによって挙動が変わるので、一度テストデータを用意して試すと理解が深まるかもしれません。

まとめ

ここまで、php substr を使った文字列操作の基本から実務での活用方法までを解説してきました。
初心者の方は、まずは簡単な文字列でどのような切り出しができるのかを確認すると良いでしょう。

  • substr 関数は「どこから」「どれだけ」の指定で部分的に文字列を取り出せる
  • 負の値を使うと、末尾からの位置指定や長さ指定が可能
  • 日本語などのマルチバイト文字を扱う場合は mb_substr の検討も視野に入れる
  • length引数の扱いには注意し、範囲外の場合は空文字が返ることを理解しておく

文字列の操作はプログラミングにおいてとても頻繁に使われる処理です。
php substr を上手に使いこなすことで、実務の幅がさらに広がるのではないでしょうか。
ぜひ今回の記事を参考に、文字列の切り出しを学んでみてください。

PHPをマスターしよう

この記事で学んだPHPの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。