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() - 文字列内の部分文字列が最初に現れる場所を見つける
+add a note

User Contributed Notes

There are no user contributed notes for this page.