文字列の中に特定の文字列を含むか判定、その位置を検索できるmb_strpos/mb_strrpos関数とは?
文字列の中を指定文字列で検索するmb_strpos関数とmb_strrpos関数を紹介します。
strpos/strrpos関数も存在しますが、mb_strposとmb_strrposはマルチバイトに対応しているので日本語の判定や検索にも利用できます。こちらを使うクセをつけておいた方がよいでしょう。
mb_strposとmb_strrposの違いは指定文字列が「最初」に見つかるか「最後」に見つかるかの違いです。
関数名の覚え方・意味
関数名のスペルがややこしいので、ちょっと覚え方の豆知識を。
mb_strpos() = mb(マルチバイト) + string(文字列) + position(位置)
mb_strrpos() = mb(マルチバイト) + string(文字列) + reverse(逆) + position(位置)
※マルチバイトは日本語を扱えるという意味です。
特定の文字列の「最初」の出現位置を検索するmb_strpos関数
mb_strpos関数の基本構文
ある文字列の中の指定文字列の「最初」の出現位置を返します。
mb_strpos ( string $string, string $needle , int $offset = 0 , string|null $encoding = null )
パラメータ
型 | 名前 | 初期値 | 説明 |
string | $string | 検索する対象文字列 | |
string | $needle | 見つけたい指定文字列 | |
int | $offset | 0 | 検索開始位置のインデックス※ |
string | $encoding | null | エンコーディング文字列 例) SJIS, SJIS-win, ISO-2022-JP, JIS, UTF-8, EUC-JP |
※PHP7.1からはoffsetに負の値を指定できます。文字列の末尾から何文字分もどったところから検索を開始するかという使い方ができます。
返り値(戻り値)
型 | 説明 | 例 |
int/false | 見つかった時は指定文字列が見つかった位置をintで返す。見つからなかった場合はfalse |
mb_strpos関数の使い方
文字列を含むか判定し、最初の出現の位置を求めるサンプルソースコード
$str = "12AA34AA56";
$search = "AA";
$index = strpos($str, $search); //最初のAAの位置を検索
if($index === false){ //ない場合はfalse
echo "{$str}の中に{$search}はありませんでした" . PHP_EOL;
}else{
echo "{$str}の中の{$search}の位置は{$index}です" . PHP_EOL;
}
12AA34AA56の中のAAの位置は2です
検索開始位置offsetを指定するサンプルソースコード
$str = "12AA34AA56";
$search = "AA";
$index = strpos($str, $search, 5); //検索開始位置を指定
if($index === false){ //ない場合はfalse
echo "{$str}の中に{$search}はありませんでした" . PHP_EOL;
}else{
echo "{$str}の中の{$search}の位置は{$index}です" . PHP_EOL;
}
12AA34AA56の中のAAの位置は6です
検索開始位置offsetを末尾から指定するサンプルソースコード
offsetに負の値を指定すると末尾からその文字分数えて検索開始位置とします。
$str = "12AA34AA56";
$search = "AA";
$index = strpos($str, $search, -8); //検索開始位置を指定
if($index === false){ //ない場合はfalse
echo "{$str}の中に{$search}はありませんでした" . PHP_EOL;
}else{
echo "{$str}の中の{$search}の位置は{$index}です" . PHP_EOL;
}
12AA34AA56の中のAAの位置は2です
特定の文字列の「最後」の出現位置を検索するmb_strrpos関数
mb_strrpos関数の基本構文
ある文字列の中の指定文字列の「最後」の出現位置を返します。
mb_strrpos ( string $haystack , string $needle , int $offset = 0 , string|null $encoding = null )
パラメータ
型 | 名前 | 初期値 | 説明 |
string | $string | 検索する対象文字列 | |
string | $needle | 見つけたい指定文字列 | |
int | $offset | 0 | 検索開始、終了位置のインデックス※ |
string | $encoding | null | エンコーディング文字列 例) SJIS, SJIS-win, ISO-2022-JP, JIS, UTF-8, EUC-JP |
※負の値を指定すると検索「終了」位置を文字列の末尾から何文字分もどったところで終了するという指定になります。「開始」位置の指定ではなく終了位置であることに注意してください。
返り値(戻り値)
型 | 説明 | 例 |
int/false | 見つかった時は指定文字列が見つかった位置をintで返す。見つからなかった場合はfalse |
mb_strrpos関数の使い方
文字列を含むか判定し、最後の出現の位置を求めるサンプルソースコード
$str = "12AA34AA56";
$search = "AA";
$index = strrpos($str, $search); //最後のAAの位置を検索
if($index === false){ //ない場合はfalse
echo "{$str}の中に{$search}はありませんでした" . PHP_EOL;
}else{
echo "{$str}の中の{$search}の位置は{$index}です" . PHP_EOL;
}
12AA34AA56の中のAAの位置は6です
検索開始位置offsetを指定するサンプルソースコード
$str = "12AA34AA56";
$search = "AA";
$index = strrpos($str, $search, 2); //
if($index === false){ //ない場合はfalse
echo "{$str}の中に{$search}はありませんでした" . PHP_EOL;
}else{
echo "{$str}の中の{$search}の位置は{$index}です" . PHP_EOL;
}
12AA34AA56の中のAAの位置は6です
検索「終了」位置offsetを末尾から指定するサンプルソースコード
strrposで負の値を指定する場合は注意が必要です。検索の開始位置ではなく終了位置を終端からの文字数で指定します。
$str = "12AA34AA56";
$search = "AA";
$index = strrpos($str, $search, -5); //負の値の場合は末尾からの「終了」位置を指定
if($index === false){ //ない場合はfalse
echo "{$str}の中に{$search}はありませんでした" . PHP_EOL;
}else{
echo "{$str}の中の{$search}の位置は{$index}です" . PHP_EOL;
}
12AA34AA56の中のAAの位置は2です
関連する関数
strpos
mb_strposのマルチバイトじゃない版
strrpos
mb_strrposのマルチバイトじゃない版
コメント