Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. strpos() / strrpos() / mb_strpos()

strpos() / strrpos() / mb_strpos()対応: PHP 4(2000)

文字列の中から指定した文字列を検索し、見つかった位置を返します。マルチバイト文字を含む場合は『mb_strpos()』を使用してください。

構文
// 先頭から検索して最初に見つかった位置を返します。
strpos($haystack, $needle, $offset);

// 末尾から検索して最後に見つかった位置を返します。
strrpos($haystack, $needle, $offset);

// マルチバイト対応で先頭から検索します。
mb_strpos($haystack, $needle, $offset, $encoding);

// 最初に見つかった位置以降の文字列を返します。
strstr($haystack, $needle, $before_needle);

// 大文字・小文字を区別せずに検索します。
stristr($haystack, $needle, $before_needle);
関数一覧
関数概要
strpos($haystack, $needle, $offset)先頭から検索し、最初に見つかった位置を返します。見つからない場合は『false』を返します。第3引数は検索開始位置で省略可能です。
strrpos($haystack, $needle, $offset)末尾から検索し、最後に見つかった位置を返します。見つからない場合は『false』を返します。
mb_strpos($haystack, $needle, $offset, $encoding)マルチバイト文字に対応した『strpos()』です。日本語を含む文字列ではこちらを使用してください。
strstr($haystack, $needle, $before_needle)最初に見つかった位置以降の文字列を返します。第3引数に『true』を指定すると、見つかった位置より前の文字列を返します。
stristr($haystack, $needle, $before_needle)大文字・小文字を区別せずに検索する『strstr()』です。
戻り値

『strpos()』『strrpos()』『mb_strpos()』は見つかった位置を整数で返し、見つからない場合は『false』を返します。『strstr()』『stristr()』は見つかった位置以降の文字列を返し、見つからない場合は『false』を返します。

サンプルコード
<?php
$str = "東京都渋谷区神南1丁目";

// strpos() で検索します。日本語ではバイト位置が返されます。
echo strpos($str, "渋谷"); // UTF-8のバイト位置『9』が出力されます。

// mb_strpos() で正しい文字位置を取得します。
echo mb_strpos($str, "渋谷", 0, "UTF-8"); // 『3』と出力されます。

// 見つからない場合は false を返します。
var_dump(mb_strpos($str, "大阪", 0, "UTF-8")); // 『bool(false)』と出力されます。

// strrpos() で最後に見つかった位置を取得します。
$path = "/var/www/html/index.php";
echo strrpos($path, "/"); // 『13』と出力されます。

// strstr() で見つかった位置以降の文字列を取得します。
$email = "user@example.com";
echo strstr($email, "@"); // 『@example.com』と出力されます。

// 第3引数に true を指定すると、見つかった位置より前を取得します。
echo strstr($email, "@", true); // 『user』と出力されます。

// stristr() は大文字・小文字を区別しません。
echo stristr("Hello World", "hello"); // 『Hello World』と出力されます。

// strpos() の戻り値を判定する際は厳密比較を使います。
if (strpos("abcdef", "abc") !== false) {
	echo "見つかりました。"; // 位置が 0 でも正しく判定できます。
}
概要

『strpos()』は文字列内で指定した文字列を検索し、最初に見つかった位置を返す関数です。見つからない場合に『false』を返しますが、先頭で見つかった場合は『0』を返すため、== で比較すると正しく判定できません。必ず !== false で厳密比較を行ってください。

日本語を含む文字列では、『strpos()』はバイト位置を返すため文字位置とずれが生じます。正しい文字位置を取得するには『mb_strpos()』を使用してください。

単に文字列が含まれているかどうかを調べたい場合は、PHP 8.0 以降であれば str_contains() が使えます。メールアドレスからドメイン部分を取り出すなど、特定の文字以降を抽出したい場合は『strstr()』が便利です。文字列の置換には『str_replace()』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。