PHPで文字列を含むか検索する5つの方法!

PHP

PHPで特定の文字列を含むか検索する方法について書いています。
下記の関数を使って、特定文字列が文字列に含まれるか検索することが可能です。

・strpos関数
・mb_strpos関数
・strstr関数
・mb_strstr関数
・preg_match関数

サンプルコードは、PHPバージョン8.1.8で検証しています。

PR

strpos関数で含むか確認する

strpos関数を使うと、対象文字列から検索文字列が見つかった位置を返します。
公式ドキュメントはこちらにあります。
例えば、下記のように使います。

<?php
$text = "hello world";

$result = strpos($text, "world");
if ($result !== false) {
    echo "worldを含む:{$result}"; // worldを含む:6
}

$text変数に対象文字列「hello world」を代入しました。

次にstrpos関数を呼び出しています。
第1引数に検索対象文字列、第2引数に検索文字列を渡します。
今回は、対象文字列が「hello world」、検索文字列が「world」です。

見つかった場所を$result変数で受け取っています。
文字列を0番目から数えて、今回は「6」が返ってきます。

strpos関数では、見つからなかった場合にはfalseが返ってきます。
if文でfalseではなかった場合(見つかった時)に処理を通るようにしました。
結果、「worldを含む:6」が出力されて処理が終了します。

比較演算子に注意する

strpos関数から返された値を比較するときに注意が必要です。
最初の文字だった場合は、0が返ってくるためです。

下記のように「!=」を使った場合には、if文でtrueになりません。
0 == false」はtrueのためです。

<?php
$text = "hello world";

$result = strpos($text, "h");
if ($result != false) {
    echo "worldを含む:{$result}";
}

型まで同じか確認してくれる「!==」を使う必要があります。

日本語の場合には位置が正しくない

日本語の場合には正しい位置が返ってきません。
例えば、下記のような場合です。

echo strpos("オーケー!グーグル", "グ"); // 15

文字列を0から数えると、探したい「グ」は5番目ですが、strpos関数は「15」を返します。
マルチバイト文字で使用する場合には、次項で紹介するmb_strpos関数を使いましょう。

先ほどの例もmb_strpos関数を使うと、5番目が返ってきます。

echo mb_strpos("オーケー!グーグル", "グ"); // 5
PR

mb_strpos関数で含むか確認する

mb_strpos関数はstrpos関数のマルチバイト対応バージョンです。
公式ドキュメントはこちらにあります。
日本語の文字列でも文字位置を正しく返してくれます。

<?php
$text = "生麦生米生卵";

$result = mb_strpos($text, "米");
if ($result !== false) {
    echo "米を含む:{$result}";
}

$text変数に検索対象文字列「生麦生米生卵」を代入しています。

次にmb_strpos関数を使って、検索対象文字列に「米」を指定しています。
$result変数に見つかった位置を受け取ります。

if文の処理を行います。
今回は、検索対象文字列を含んでいるので、「米を含む:3」を出力して処理が終了します。
日本語でも0番目から数えた位置が返ってきていることが確認できました。

strstr関数で含むか確認する

strstr関数でも文字列を含むか確認することが可能です。
公式ドキュメントはこちらにあります。
公式ドキュメントでも記載がありますが、strpos関数の方が高速で消費メモリも少ないため、単純に含むかを探す場合にはstrposを使いましょう。

strstr関数では下記のように、見つかった位置から末尾までの文字列を返します。

<?php
$text = "hello world!! strstr test!!";
$result = strstr($text, "wo");
if ($result !== false) {
    echo "woを含む:{$result}";
}

$text変数に対象文字列「hello world!! strstr test!!」を代入しました。

次にstrstr関数を呼び出しています。
第1引数に検索対象文字列、第2引数に検索文字列を渡します。

strstr関数では、見つかった場所から末尾までを、文字列として返します。
見つかった文字列を$result変数で受け取っています。
見つからなかった場合にはfalseが返ってきます。

if文でfalseではなかった場合に処理を通るようにしました。
結果、「woを含む:world!! strstr test!!」が出力されて処理が終了します。

見つかった「wo」から末尾までの文字列が返ってきていることが確認できました。

mb_strstr関数で含むか確認する

mb_strstr関数はstrstr関数のマルチバイト対応バージョンです。
公式ドキュメントはこちらにあります。
strstr関数を使った場合には文字化けることがあるので、マルチバイト文字の場合にはmb_strstr関数を使います。

strstr関数と同じように、下記のように使うことが可能です。

<?php
$text = "焼肉定食!!!";
$result = mb_strstr($text, "肉");
if ($result !== false) {
    echo "肉を含む:{$result}";
}

$text変数に対象文字列「焼肉定食!!!』を代入しました。

次にmb_strstr関数を呼び出しています。
第2引数に検索文字の「肉」を渡して、$text変数から探しています。

$resultで、見つかった箇所以降の日本語を、返り値として受け取ります。
if文でfalseではなかった場合に処理を通るようにしました。
結果、「肉を含む:肉定食!!!」が出力されて処理が終了します。

preg_match関数で含むか確認する

preg_match関数を使うと、正規表現を使って、文字列の中に含むかを確認することが可能です。
公式ドキュメントはこちらにあります。

例えば、下記のように使います。

<?php
$text = "apple100 banana200";
$result = preg_match("/[0-9]{3}/", $text);

if ($result) {
    echo "数値3桁が含まれます!";
}

$text変数に対象文字列「apple100 banana200」を代入しました。

次にpreg_match関数を呼び出しています。
第1引数に正規表現、第2引数に検索対象文字列を渡します。
正規表現で「/[0-9]{3}/」としているので、数値が3桁の箇所を探します。

preg_match関数では見つかった場合には「1」が返ってきます。
見つからなかった場合には「0」が返ってきて、失敗した場合にはfalseが返ってきます。

if文で、直接$result変数を入れて、判定しています。
今回は数値3桁を含むので、「数値3桁が含まれます!」を出力して処理が終了します。

コメント

Ads Blocker Image Powered by Code Help Pro

広告ブロッカーが検出されました。

ブラウザの拡張機能を使用して広告ブロックをしていることが確認できました。 ブラウザの広告ブロッカー機能を無効にしていただくか、codelikes.comをホワイトリストに追加し、更新をクリックしてください。 お手数ですが、よろしくお願いします🙇‍♂️
タイトルとURLをコピーしました