・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2022年6月10日に投稿されました。)
PHPで特定の文字列を検索するには、strpos()関数を使用したり、strrpos()関数を使用したり、strstr()関数を使用したりするなど様々な方法があります。
しかし、検索した文字列のインデックスを返したり、文字列を返したりするなど、使用する関数によって返り値が異なります。
そのため、検索した文字列が見つかった場合は何かしらの値が返され、見つからなかった場合は何も返されないのでif文の条件式としても使用することができます。
また、正規表現を利用しパターンマッチ数を返り値とする関数もありますので、たくさんのパターンが存在する場合でも対応可能です。
プログラミング上、文字列を検索することはよくあることなので、もしPHPで特定の文字列の検索をしたい場合は、こちらの記事をご参考ください。
今回はPHPで特定の文字列を検索する方法の一覧について紹介していきます。
特定の文字列を検索する処理の流れ
特定の文字列を検索する基本的な処理の流れは下記の画像のようになります。
見つかった場合は何かしらのデータが返されるようになり、見つからなかった場合は空が返されるようになります。
そして、if文の条件として使用した際に、見つかった場合trueを通過し、見つからなかった場合はfalse(else)を通過するようになります。
基本的な処理の流れは上記のようになりますが、全てこのような処理になるかというとそうではありませんので注意して下さい。
例えば、パターンマッチの回数を返り値とした関数を使用した場合、下記のような処理の流れとなります。
マッチした場合は「1」や「マッチ数」、マッチしなかった場合は「0」が返されるようになります。
検索した文字列が見つからなくても、何かしらの値が返される処理が行われるケースも存在します。
特定の文字列を検索する方法はたくさんありますので、「値が返された = 検索した文字が見つかった」と認識せず、返り値が何になるかによって判断するようにしましょう。
インデックスを返り値として特定の文字列を検索する方法の一覧
インデックスを返り値として特定の文字列を検索する方法の一覧は下記の6つとなります。
- strpos()関数で特定の文字列を検索する
- stripos()関数で特定の文字列を検索する
- strrpos()関数で特定の文字列を検索する
- strripos()関数で特定の文字列を検索する
- mb_strpos()関数で特定の文字列を検索する
- mb_strrpos()関数で特定の文字列を検索する
strpos()関数で特定の文字列を検索する場合
strpos()関数で特定の文字列を検索してみます。
strpos()とは、検索した文字列が最初に現れる位置を探す関数になります。
1 2 3 4 5 6 7 8 | <?php $text1 = 'abcdefghijklmn' ; echo '検索対象の文字列: '.$text1; echo '検索する文字列: m'; $serachText1 = strpos($text1, 'm'); echo 'strpos()で特定の文字列を検索した結果: '. $serachText1; ?> |
実行結果
strpos()によって検索した文字列をインデックスで取得しています。
そのため、mは13番目にあるので「12」が表示されています。
もし、strpos()について詳しく知りたい場合は下記の記事をご参考ください。
stripos()関数で特定の文字列を検索する場合
stripos()とは、strpos()と同じで検索した文字列が最初に現れる位置を探す関数になります。
しかし、検索する文字列は大文字と小文字で区別されません。
1 2 3 4 5 6 7 8 | <?php $text2 = 'ABCDEFGHIJKLMN' ; echo '検索対象の文字列: '.$text2; echo '検索する文字列: cde'; $serachText2 = stripos($text2, 'Cde'); echo 'stripos()で特定の文字列を検索した結果: '. $serachText2; ?> |
実行結果
stripos()によって検索した文字列を大文字や小文字関係なく、インデックスで取得しています。
そのため、cdeは大文字ですが3番目にあるので「2」が表示されています。
もし、stripos()について詳しく知りたい場合は下記の記事をご参考ください。
strrpos()関数で特定の文字列を検索する場合
strrpos()とは、検索した文字列が最後に現れる位置を探す関数になります。
そのため、strpos()とは反対の関数となります。
1 2 3 4 5 6 7 8 | <?php $text3 = 'abcdefghgfedcba' ; echo '検索対象の文字列: '.$text3; echo '検索する文字列: b'; $serachText3 = strrpos($text3, 'b'); echo 'strrpos()で特定の文字列を検索した結果: '. $serachText3; ?> |
実行結果
strrpos()によって検索した文字列が最後に現れる位置をインデックスで取得しています。
そのため、bは2番目と14番目にあるので「13」が表示されています。
もし、strrpos()について詳しく知りたい場合は下記の記事をご参考ください。
strripos()関数で特定の文字列を検索する場合
strripos()とはstrrpos()と同じで、検索した文字列が最後に現れる位置を探す関数になります。
しかし、検索する文字列は大文字と小文字で区別されません。
1 2 3 4 5 6 7 8 | <?php $text4 = 'ABCDEFGHGFEDCBA' ; echo '検索対象の文字列: '.$text4; echo '検索する文字列: e'; $serachText4 = strripos($text4, 'e'); echo 'strripos()で特定の文字列を検索した結果: '. $serachText4; ?> |
実行結果
strripos()によって検索した文字列が最後に現れる位置を文字列を大文字や小文字関係なく、インデックスで取得しています。
そのため、eは5番目と11番目にあるので「10」が表示されています。
mb_strpos()関数で特定の文字列を検索する場合
mb_strpos()とは、strpos()関数と同様に、指定した文字列が最初に現れる位置を探す関数となります。
しかし、半角文字列だけでなく、マルチバイト文字列(ひらがなやカタカナ、漢字など)も対象となります。
1 2 3 4 5 6 7 8 | <?php $text2_6 = 'あいうえおかきくけこ' ; echo '検索対象の文字列: '.$text2_6; echo '検索する文字列: か'; $serachText2_6 = mb_strpos($text2_6, 'か'); echo 'mb_strpos()で特定の文字列を検索した結果: '. $serachText2_6; ?> |
実行結果
mb_strpos()によって指定したマルチバイト文字列の最初の位置をインデックスで取得しています。
そのため、「か」は6番目にあるので「5」が表示されています。
もし、mb_strpos()について詳しく知りたい場合は下記の記事をご参考ください。
mb_strrpos()関数で特定の文字列を検索する場合
mb_strrpos()とは、指定したマルチバイト文字列の最後に現れる位置を探す関数となります。
1 2 3 4 5 6 7 8 | <?php $text2_7 = 'あいうえおかきくけこあいうえお' ; echo '検索対象の文字列: '.$text2_7; echo '検索する文字列: う'; $serachText2_7 = mb_strrpos($text2_7, 'う'); echo 'mb_strrpos()で特定の文字列を検索した結果: '. $serachText2_7; ?> |
実行結果
mb_strrpos()によって指定したマルチバイト文字列の最後の位置をインデックスで取得しています。
そのため、「う」は3番目と13番目にあるので「12」が表示されています。
文字列を返り値として特定の文字列を検索する方法の一覧
文字列を返り値として特定の文字列を検索する方法は下記の5つとなります。
- strstr()関数で特定の文字列を検索する
- stristr()関数で特定の文字列を検索する
- strchr()関数で特定の文字列を検索する
- strrchr()関数で特定の文字列を検索する
- strpbrk()関数で特定の文字列を検索する
strstr()関数で特定の文字列を検索する場合
strstr()とは、指定した文字列がどの場所で現れるのかを探す関数となります。
1 2 3 4 5 6 7 8 | <?php $text5 = 'opqrstuvwxyz' ; echo '検索対象の文字列: '.$text5; echo '検索する文字列: w'; $serachText5 = strstr($text5, 'w'); echo 'strstr()で特定の文字列を検索した結果: '. $serachText5; ?> |
実行結果
strstr()によって検索した文字列の位置から末尾までの文字列を取得しています。
そのため、wから末尾の文字である「wxyz」が表示されています。
stristr()関数で特定の文字列を検索する場合
stristr()とは、strstr()と同じで指定した文字列がどの場所で現れるのかを探す関数となります。
しかし、検索する文字列は大文字と小文字で区別されません。
1 2 3 4 5 6 7 8 | <?php $text6 = 'OPQRSTUVWXYZ' ; echo '検索対象の文字列: '.$text6; echo '検索する文字列: v'; $serachText6 = stristr($text6, 'v'); echo 'stristr()で特定の文字列を検索した結果: '. $serachText6; ?> |
実行結果
stristr()によって大文字小文字関係なく、検索した文字列の位置から末尾までの文字列を取得しています。
そのため、Vから末尾の文字である「VWXYZ」が表示されています。
strchr()関数で特定の文字列を検索する場合
strchr()とはstrstr()同様に指定した文字列がどの場所で現れるのかを探す関数となります
1 2 3 4 5 6 7 8 | <?php $text7 = 'abcdefghijklmn' ; echo '検索対象の文字列: '.$text7; echo '検索する文字列: g'; $serachText7 = strchr($text7, 'g'); echo 'strchr()で特定の文字列を検索した結果: '. $serachText7; ?> |
実行結果
strchr()によって検索した文字列の位置から末尾までの文字列を取得しています。
そのため、gから末尾の文字である「ghijklmn」が表示されています。
strrchr()関数で特定の文字列を検索する場合
strrchr()とは検索した文字列が最後に現れる位置を探す関数になります。
1 2 3 4 5 6 7 8 | <?php $text8 = 'abcdefghabcdefgh' ; echo '検索対象の文字列: '.$text8; echo '検索する文字列: d'; $serachText8 = strrchr($text8, 'd'); echo 'strrchr()で特定の文字列を検索した結果: '. $serachText8; ?> |
実行結果
strrchr()によって検索した文字列が最後に現れる位置から末尾までの文字列を取得しています。
そのため、2つ目のdから末尾の文字列である「defgh」が表示されています。
strpbrk()関数で特定の文字列を検索する場合
strpbrk()とは指定した文字で始まる文字列を探す関数となります。
1 2 3 4 5 6 7 8 | <?php $text9 = '12345678910' ; echo '検索対象の文字列: '.$text9; echo '検索する文字列: 81'; $serachText9 = strpbrk($text9, ' 81'); echo 'strpbrk()で特定の文字列を検索した結果: '. $serachText9; ?> |
実行結果
今回、検索する文字列は81ですが、strpbrk()によって「8」と「1」のどちらか先に出てきている位置から末尾までを取得するようになります。
そのため、1から末尾の文字列である「12345678910」が表示されています
パターンマッチ数を返り値として特定の文字列を検索する方法の一覧
パターンマッチ数を返り値として特定の文字列を検索する方法は下記の2つとなります。
- preg_match()関数で特定の文字列を検索する
- preg_match_all()関数で特定の文字列を検索する
preg_match()関数で特定の文字列を検索する場合
preg_match()とは正規表現を用いて文字列を検索する関数となります。
そも正規表現とは、いくつかのパターンの文字列を1つの形式で表現するための方法であり、数多のパターンがある文字列でもすぐに検索することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php $phoneNum1 = "Aさん: 080-1111-2222 Bさん: 090-2222-1111"; echo '検索対象の文字列: '.$phoneNum1; $pattern1_1 = preg_match("/[0-9]{3}-[0-9]{4}-[0-9]{4}/", $phoneNum1); $pattern1_2 = preg_match("/[9]{3}-[0-9]{4}-[0-9]{4}/", $phoneNum1); if ($pattern1_1) { echo "マッチしました。"; } else { echo "マッチしませんでした。"; } echo 'preg_match()の戻り値: '. $pattern1_1; if ($pattern1_2) { echo "マッチしました。".; } else { echo "マッチしませんでした。"; } echo 'preg_match()の戻り値: '. $pattern1_2; ?> |
実行結果
検索対象の文字列を検索した結果、preg_match()で検索したパターンと一致している文字列が存在しています。
そのため、ifではtrueを通り、「マッチしました。」が表示されています。
また、戻り値としてはパターンが見つかったことから「1」が返されます。
preg_match_all()関数で特定の文字列を検索する場合
preg_match_all()も同様に正規表現を用いて文字列を検索する関数となります。
しかし、こちらの関数はマッチした回数が返り値となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php $phoneNum2 = "Aさん: 080-1111-2222 Bさん: 070-2222-1111 cさん: 050-2222-1111"; echo '検索対象の文字列: '.$phoneNum2; $pattern2_1 = preg_match_all("/[0-9]{3}-[0-9]{4}-[0-9]{4}/", $phoneNum2); $pattern2_2 = preg_match_all("/[9]{3}-[0-9]{4}-[0-9]{4}/", $phoneNum2); if ($pattern2_1) { echo "マッチしました。"; } else { echo "マッチしませんでした。"; } echo 'preg_match_all()の戻り値: '. $pattern2_1; if ($pattern2_2) { echo "マッチしました。"; } else { echo "マッチしませんでした。"; } echo 'preg_match_all()の戻り値: '. $pattern2_2; ?> |
実行結果
検索対象の文字列を検索した結果、preg_match_all()で検索したパターンと一致している文字列が存在しています。
そのため、ifではtrueを通り、「マッチしました。」が表示されています。
また、戻り値としてはパターンが3つ見つかったことから「3」が返されます。
まとめ
⚫︎ 特定の文字列を検索する処理の流れとして、見つかると何かしらのデータが返されり、見つからない場合は空が返される
(パターンマッチの回数を返り値とした場合は例外)
⚫︎ インデックスを返り値として特定の文字列を検索するには下記の方法がある
・strpos()関数で特定の文字列を検索する
・stripos()関数で特定の文字列を検索する
・strrpos()関数で特定の文字列を検索する
・strripos()関数で特定の文字列を検索する
・mb_strrpos()関数で特定の文字列を検索する
・mb_strripos()関数で特定の文字列を検索する
⚫︎ 文字列を返り値として特定の文字列を検索するには下記の方法がある
・strstr()関数で特定の文字列を検索する
・stristr()関数で特定の文字列を検索する
・strchr()関数で特定の文字列を検索する
・strrchr()関数で特定の文字列を検索する
・strpbrk()関数で特定の文字列を検索する
⚫︎ パターンマッチ数を返り値として特定の文字列を検索するには下記の方法がある
・preg_match()関数で特定の文字列を検索する
・preg_match_all()関数で特定の文字列を検索する