« mb_strlen
mb_strrchr »

mb_strpos

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

mb_strpos — 文字列の中に指定した文字列が最初に現れる位置を見つける

説明

function mb_strpos(
    string $haystack,
    string $needle,
    int $offset = 0,
    ?string $encoding = null
): int|false

haystack の中で needle 文字列が最初に現れる位置を見つけます。

マルチバイト文字列に正しくマッチするように strpos() を拡張したもので、 最初の 1 文字目の位置が 0 、2 文字目の文字が 1 というようになります。

パラメータ

haystack

needle が最初に現れる位置を調べたい文字列。

needle

haystack の中から探す文字列。 strpos() とは違い、 数値を指定しても文字コードの値と見なされることはありません。

offset

文字単位での検索オフセット。 指定されない場合は、0 が使用されます。 負のオフセットは、文字列の末尾からのオフセットと解釈されます。

encoding

encoding パラメータには文字エンコーディングを指定します。省略した場合、もしくは null の場合は、 内部文字エンコーディングを使用します。

戻り値

文字列 haystack の中で needle が最初に現れる位置を、 バイト位置ではなく、0 から数えた文字位置で返します。 needle が見付からなかった場合、false を返します。

エラー / 例外

  • offset が haystack の長さより大きい場合、 ValueError がスローされます。

変更履歴

バージョン 説明
8.0.0 needle は、空の文字列も受け入れるようになりました。
8.0.0 encoding は、nullable になりました。
7.1.0 負の offset をサポートするようになりました。

例

例1 mb_strpos() はバイトオフセットではなく文字オフセットを返す

<?php
// "🐘" は 4 バイトだが 1 文字、"é" は 2 バイトだが 1 文字
$str = "🐘H🐘é";

var_dump(mb_strpos($str, "é"));  // バイト位置 9 ではなく文字位置 3
var_dump(mb_strpos($str, "🐘", 1)); // 最初の "🐘" を飛ばして文字位置 2
?>

上の例の出力は以下となります。

int(3)
int(2)

参考

  • mb_strrpos() - 文字列の中に指定した文字列が最後に現れる位置を見つける
  • mb_stripos() - 大文字小文字を区別せず、 文字列の中で指定した文字列が最初に現れる位置を探す
  • mb_internal_encoding() - 内部文字エンコーディングを設定あるいは取得する
  • strpos() - 文字列内の部分文字列が最初に現れる場所を見つける

関連キーワード:
最初   strpos   needle   haystack   encoding   オフセット   バイト   offset   エンコーディング   マルチバイト   内部   dump   strlen   strrchr   マッチ   拡張   数値   コード   単位   末尾   解釈   省略   ValueError   履歴   nullable
関連する関数・ページ:
function.iconv-strpos   function.mb-stripos   function.mb-strstr   function.strpos   function.mb-stristr   function.mb-strrpos