【PHP8.x】strrchr関数の使い方
strrchr関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
strrchr関数は、指定された文字列($haystack)の中から、特定の文字($needle)が最後に現れる位置を探し、その位置から元の文字列の最後までを返す関数です。この関数は、主に文字列の特定の部分を抽出したい場合に利用されます。
引数としては、まず検索対象となる文字列を一つ目に指定します。二つ目の引数には、検索したい文字を指定します。この$needle引数に複数の文字を指定した場合でも、実際に検索の対象となるのはその最初の1文字のみである点にご注意ください。
戻り値としては、$needleが見つかった場合、その$needleを含む、最後に$needleが現れた位置から文字列の終わりまでの部分文字列を返します。もし$needleが$haystackの中で見つからなかった場合は、falseを返します。このfalseが返されたかどうかを確認することで、指定した文字が存在したかを判断できます。
この関数は、大文字と小文字を区別して検索を実行します。例えば、「A」と「a」は異なる文字として扱われます。似た機能を持つstrchr関数やstrstr関数が最初に見つかった文字の位置から文字列を返すのに対し、strrchr関数は「最後に」見つかった位置から返す点が特徴です。例えば、ファイルパスから拡張子を除いたファイル名を取得する際など、文字列の後方から特定の区切り文字を検索したい場合に特に役立ちます。
構文(syntax)
1strrchr(string $haystack, string|int $needle): string|false
引数(parameters)
string $haystack, string $needle, bool $before_needle = false
- string $haystack: 検索対象の文字列
- string $needle: 検索する文字列
- bool $before_needle = false: trueの場合、$needle より前の部分文字列を返す
戻り値(return)
string|false
指定された文字列の最後に出現する指定文字以降の部分文字列を返します。指定文字が見つからなかった場合は false を返します。
サンプルコード
PHP mb_strrchrでマルチバイト文字列を検索・抽出する
1<?php 2 3/** 4 * PHPのmb_strrchr関数を用いた、マルチバイト文字列の検索と抽出のサンプルコードです。 5 * 指定された文字列が最後に現れる位置に基づき、文字列の一部を返します。 6 * システムエンジニアを目指す初心者向けに、基本的な使い方を示します。 7 */ 8 9// mb_strrchr関数がマルチバイト文字(例: 日本語)を正しく処理できるよう、 10// 内部エンコーディングをUTF-8に設定します。 11mb_internal_encoding('UTF-8'); 12 13/** 14 * mb_strrchr関数の使用例を示します。 15 * 検索対象の文字列 ($haystack) から、検索文字列 ($needle) が最後に現れる場所を検索し、 16 * その結果を標準出力に出力します。 17 * 18 * @param string $haystack 検索対象の文字列。 19 * @param string $needle 検索する文字列。 20 * @param bool $beforeNeedle trueの場合、$needleが見つかるまでの部分を返します。 21 * falseの場合、$needleが見つかった場所から文字列の最後までを返します。 22 * @return void 23 */ 24function showMbStrrchrExample(string $haystack, string $needle, bool $beforeNeedle = false): void 25{ 26 echo "--- 検索実行 ---" . PHP_EOL; 27 echo " 対象文字列: '" . $haystack . "'" . PHP_EOL; 28 echo " 検索文字列: '" . $needle . "'" . PHP_EOL; 29 echo " before_needle: " . ($beforeNeedle ? "true (見つかるまで)" : "false (見つかったところから)") . PHP_EOL; 30 31 $result = mb_strrchr($haystack, $needle, $beforeNeedle); 32 33 if ($result === false) { 34 echo " 結果: 見つかりませんでした。" . PHP_EOL; 35 } else { 36 echo " 結果: '" . $result . "'" . PHP_EOL; 37 } 38 echo PHP_EOL; // 各例の間に空行を追加 39} 40 41// --- サンプルコードの実行 --- 42 43// 1. 基本的な使用例: 最後の「PHP」から文字列の終わりまでを抽出 44showMbStrrchrExample( 45 haystack: "こんにちは、PHPの世界!PHPは素晴らしい。", 46 needle: "PHP" 47); 48 49// 2. before_needle = true の使用例: 最後の「りんご」が見つかるまでの部分を抽出 50showMbStrrchrExample( 51 haystack: "りんご、みかん、ぶどう、りんご", 52 needle: "りんご", 53 beforeNeedle: true 54); 55 56// 3. 検索文字列が部分的に一致するマルチバイト文字を含む例 57showMbStrrchrExample( 58 haystack: "データ処理、データ分析、ビッグデータ", 59 needle: "データ" 60); 61 62// 4. 検索文字列が見つからない場合 63showMbStrrchrExample( 64 haystack: "Hello World", 65 needle: "Java" 66); 67 68// 5. 空の検索文字列の場合: $haystack全体が返されます (strrchr/mb_strrchrの挙動) 69showMbStrrchrExample( 70 haystack: "これはテストです。", 71 needle: "" 72); 73 74// 6. パス文字列からディレクトリ部分を抽出するような応用例 75showMbStrrchrExample( 76 haystack: "/var/www/html/index.php", 77 needle: "/", 78 beforeNeedle: true 79);
PHPのmb_strrchr関数は、指定されたマルチバイト文字列(日本語のような複数バイトで構成される文字)の中で、特定の文字列が最後に現れる場所を検索し、その位置から文字列の一部を抽出する際に使用されます。この関数は、mb_internal_encoding関数で内部エンコーディングを適切に設定することで、マルチバイト文字を正確に扱えます。
引数$haystackには検索対象の文字列、$needleには検索する文字列を指定します。オプションの引数$before_needleは、trueに設定すると$needleが見つかるまでの部分を返します。false(デフォルト)の場合は$needleが見つかった場所から文字列の最後までを返します。$needleが見つからない場合、この関数はfalseを返します。また、$needleが空文字列の場合、$haystack全体が返されます。
サンプルコードでは、様々なパターンでmb_strrchrの動作を確認できます。例えば、「PHPは素晴らしい。」という文字列から最後の「PHP」を見つけたり、ファイルのパスからディレクトリ部分を抽出したりする応用例も示しています。これにより、文字列処理におけるこの関数の基本的な使い方とその応用を理解できるようになっています。
PHPのmb_strrchr関数を安全に使うためには、まずmb_internal_encoding('UTF-8');のように、必ず適切な内部エンコーディングを設定してください。これを怠ると、日本語などのマルチバイト文字が正しく処理されず、意図しない結果を招く可能性があります。
次に、検索文字列が見つからなかった場合、mb_strrchr関数はブール値のfalseを返します。そのため、結果の変数をif ($result === false)のように厳密に比較し、見つからない場合の処理を記述することが重要です。
第三引数$before_needleは、trueを設定すると検索文字列が見つかるまでの部分を返し、false(デフォルト)では検索文字列から文字列の最後までを返します。この挙動を理解して使い分けてください。また、検索文字列に空の文字列を指定した場合、元の文字列全体が返される点も覚えておくと良いでしょう。シングルバイト文字専用のstrrchrと異なり、mb_strrchrはマルチバイト文字に対応しているため、日本語を扱う際は本関数を利用してください。
PHP strrchr 関数で最後の出現位置から文字列を取得する
1<?php 2 3/** 4 * 文字列の中で、指定された文字が最後に現れる位置から文字列の末尾までを返します。 5 * 6 * @param string $haystack 検索対象の文字列。 7 * @param string $needle 検索する文字。 8 * @return string|false needle が見つかった場合は、needle が最後に現れる位置から haystack の末尾までの文字列を返します。 9 * needle が見つからなかった場合は、false を返します。 10 */ 11function example_strrchr(string $haystack, string $needle): string|false 12{ 13 $result = strrchr($haystack, $needle); 14 15 return $result; 16} 17 18// 使用例 19$haystack = "This is a simple example."; 20$needle = "i"; 21 22$result = example_strrchr($haystack, $needle); 23 24if ($result !== false) { 25 echo "文字列 '$needle' が最後に現れる位置から末尾までの文字列: " . $result . PHP_EOL; 26} else { 27 echo "文字列 '$needle' は見つかりませんでした。" . PHP_EOL; 28} 29 30 31// before_needle = true の使用例 32function example_strrchr_before(string $haystack, string $needle): string|false 33{ 34 $result = strrchr($haystack, $needle, true); 35 36 return $result; 37} 38 39$haystack = "This is a simple/example.php"; 40$needle = "/"; 41$result = example_strrchr_before($haystack, $needle); 42 43if ($result !== false) { 44 echo "文字列 '$needle' が最後に現れる位置の手前までの文字列: " . $result . PHP_EOL; 45} else { 46 echo "文字列 '$needle' は見つかりませんでした。" . PHP_EOL; 47}
strrchr関数は、文字列$haystackの中で、指定された文字$needleが最後に現れる位置から文字列の末尾までを抽出する関数です。システムエンジニアを目指す上で、ファイル名から拡張子を抽出したり、パスから特定のディレクトリ名を取得したりする際に役立ちます。
第一引数には検索対象となる文字列$haystackを指定します。第二引数には検索する文字$needleを文字列として指定します。PHP 8以降では、$needleに文字列全体を指定できるようになりました。オプションの第三引数$before_needleにtrueを指定すると、$needleが最後に現れる位置の手前までの文字列を返します。
関数は、$needleが$haystackの中で見つかった場合、$needleが最後に現れる位置から$haystackの末尾までの文字列を返します。$before_needleがtrueの場合は、$needleの手前までを返します。もし$needleが$haystackの中で見つからなかった場合は、falseを返します。
上記のサンプルコードでは、まずexample_strrchr関数で、文字列"This is a simple example."の中から、文字"i"が最後に現れる位置以降の文字列を抽出しています。次に、example_strrchr_before関数で、文字列"This is a simple/example.php"の中から、"/"が最後に現れる位置の手前までの文字列を抽出しています。抽出された文字列、または"見つかりませんでした"というメッセージが画面に出力されます。strrchr関数は、文字列操作において非常に便利なツールです。
strrchr関数は、文字列の中で指定した文字が最後に現れる場所から後ろの部分を抽出します。引数$needleには、検索する文字を文字列で指定します。例えば、文字コードで指定したい場合でも、chr(コード)のように文字列に変換する必要があります。
before_needle引数をtrueにすると、最後に現れる文字の手前までの文字列を返します。ファイルパスからファイル名だけを取り出したい場合などに便利です。
戻り値は文字列またはfalseなので、===演算子を使って厳密にfalseかどうかを判定しましょう。strrchrはバイナリセーフな関数なので、画像ファイルなどのバイナリデータにも使用できます。ただし、文字エンコーディングには注意が必要です。