【PHP8.x】mb_strrpos関数の使い方
mb_strrpos関数は、指定された文字列の中から、特定の部分文字列が最後に現れる位置を、文字単位で検索し、その開始位置(オフセット)を返す関数です。この関数の大きな特徴は、日本語のようなマルチバイト文字を含む文字列を正確に扱える点にあります。通常のstrrpos
関数が文字列をバイト単位で処理するのに対し、mb_strrpos
関数は文字単位で処理するため、マルチバイト文字を含む文字列であっても文字化けや意図しない位置ずれを心配することなく、安全かつ正確な検索が可能です。
検索対象となる文字列は$haystack
引数で、検索したい部分文字列は$needle
引数で指定します。オプションとして$offset
引数で検索を開始する位置を文字単位で指定できます。$offset
が正の値の場合、検索は文字列の先頭からその文字数分進んだ位置から開始され、文字列の先頭方向に向かって行われます。$offset
が負の値の場合、検索は文字列の末尾からその文字数分戻った位置から開始され、文字列の先頭方向に向かって行われます。また、$encoding
引数を用いて、検索に使用する文字エンコーディングを明示的に指定することも可能です。これを指定しない場合、PHPの内部エンコーディング設定が自動的に適用されます。
部分文字列が見つかった場合、mb_strrpos
関数は0から始まるその開始位置を整数で返します。もし部分文字列が見つからなかった場合は、false
が返されます。この関数は、例えばファイルパスから拡張子を抽出する際に、最後のドットの位置を特定したり、URL文字列の最後のスラッシュの位置を見つけてパスを分割したりするなど、マルチバイト文字列を扱う多様な場面で非常に有用です。正確な文字列操作が求められるWebアプリケーション開発において、mb_strrpos
関数は不可欠なツールの一つと言えます。
基本的な使い方
構文(syntax)
<?php
$haystack = "プログラミング言語のPHPは素晴らしい言語です。";
$needle = "言語";
$offset = 0; // 検索を開始する位置(バイト数ではなく文字数オフセットで指定することも可能だが、ここでは一般的なバイトオフセットとして扱う)
$encoding = 'UTF-8'; // 使用する文字エンコーディング
// $haystack 内で $needle が最後に出現する位置を検索
// 見つかった場合はその位置(0から始まるオフセット)、見つからない場合は false を返す
$lastPosition = mb_strrpos($haystack, $needle, $offset, $encoding);
if ($lastPosition !== false) {
echo "文字列 '{$needle}' は '{$haystack}' の最後の位置 {$lastPosition} で見つかりました。\n";
} else {
echo "文字列 '{$needle}' は '{$haystack}' の中に見つかりませんでした。\n";
}
?>
引数(parameters)
string $haystack, string $needle, int $offset = 0, ?string $encoding = null
- string $haystack: 検索対象の文字列
- string $needle: 検索する文字列
- int $offset = 0: 検索を開始する位置(省略可能、デフォルトは文字列の末尾から)
- ?string $encoding = null: 文字エンコーディングの指定(省略可能、デフォルトは内部エンコーディング)
戻り値(return)
int|false
指定された文字が文字列内で最後に出現する位置を数値で返します。見つからない場合はfalseを返します。