substr() と strpos() を組み合わせて、任意の文字列を抽出する方法を解説します。
基本的な手順
- strpos(string $haystack, string $needle, int $offset = 0): int | false
を使って、文字列haystackの中で、needleが最初に現れる位置を探します。
文字列の中に指定した文字列が見つかった場合、見つかった位置を0から数値で返します。
見つからなかった場合は、論理値FALSEを返します。・haystack:検索対象の文字列。
・needle:検索する文字列。
・offset:指定すると、文字列内での検索開始位置がその位置になります
(0から始まるインデックス)。
負の数を指定すると、文字列の末尾からこの数だけ戻った場所から
検索を開始します。 を使って、substr(string $string, int $start [, int $length])
特定の位置から文字列を切り取ります。
・$string : 処理対象の文字列。
・$start : 開始位置(0から始まるインデックス)。
負の値を指定すると文字列の末尾からの位置指定になります。
・$length : 抽出する長さ。このパラメータは任意で、
指定しない場合は$startから文字列の末尾までが抽出されます。
負の値を指定すると、文字列の末尾から数えてその数だけ
除外された部分が取得されます。
例①: 「IDは12345です。」からIDの数値を抽出
php<?php
$text = "ユーザーのIDは12345です。";
// "IDは" の位置を探す
$start = strpos($text, "IDは");
if ($start !== false) {
// "IDは" の後の位置を取得("IDは" の長さは6バイト)
$start += strlen("IDは");
// "です" の位置を探す
$end = strpos($text, "です", $start);
// "です" が見つかった場合、開始位置から抽出
if ($end !== false) {
$id = substr($text, $start, $end - $start);
echo "抽出したID: " . $id; // 12345
}
}
?>
🔹 解説
strpos($text, "IDは")で"IDは"の開始位置を取得。strlen("IDは")を加算し、数値部分の開始位置を取得。strpos($text, "です", $start)で終了位置を取得。substr($text, $start, $end - $start)で数値部分を切り取る。
例②: : の後の値を取得
php<?php
$text = "価格: 2500円";
// ":" の位置を取得
$start = strpos($text, ":");
if ($start !== false) {
// ":" の後の文字列を取得
$value = trim(substr($text, $start + 1));
echo "抽出した値: " . $value; // 2500円
}
?>
🔹 解説
trim()を使って、余分な空白を除去。
例③: [] 内の文字列を取得
php<?php
$text = "商品コード[ABC123]が登録されました。";
// "[" の位置を取得
$start = strpos($text, "[");
if ($start !== false) {
// "]" の位置を取得
$end = strpos($text, "]", $start);
if ($end !== false) {
// "[" の次の位置から "]" までの文字を抽出
$code = substr($text, $start + 1, $end - $start - 1);
echo "抽出した商品コード: " . $code; // ABC123
}
}
?>
🔹 解説
strpos($text, "[")とstrpos($text, "]", $start)を使い、[]の中身を抽出。
まとめ
| 関数 | 役割 |
|---|---|
strpos($text, $search) | $search の最初の出現位置を取得 |
substr($text, $start, $length) | $start から $length 文字を取得 |
strlen($text) | 文字列の長さを取得 |
trim($text) | 余分な空白を除去 |
substr() と strpos() を組み合わせることで、特定の文字列を簡単に抽出できます!

