PHP での文字列検索: strpos() と str_contains() の解説
PHP で文字列の中に特定の単語が含まれるかチェックする方法
PHP で文字列の中に特定の単語が含まれるかどうかを調べるには、主に次の関数を使用します:
- strpos(): 文字列内の特定の文字列の位置を返す関数です。見つからない場合は false を返します。
- str_contains(): PHP 8 から導入された関数で、文字列の中に特定の文字列が含まれるかどうかを直接チェックします。真偽値 (true/false) を返します。
strpos() を使った例
<?php
$haystack = "これはテスト用の文字列です";
$needle = "テスト";
if (strpos($haystack, $needle) !== false) {
echo "文字列の中に 'テスト' という単語が含まれています";
} else {
echo "文字列の中に 'テスト' という単語は含まれていません";
}
?>
str_contains() を使った例
<?php
$haystack = "これはテスト用の文字列です";
$needle = "テスト";
if (str_contains($haystack, $needle)) {
echo "文字列の中に 'テスト' という単語が含まれています";
} else {
echo "文字列の中に 'テスト' という単語は含まれていません";
}
?>
説明
$haystack
は検索対象の文字列です。$needle
は検索する単語です。strpos($haystack, $needle)
は、$haystack
内で$needle
が見つかった場合、その位置を返します。見つからない場合は false を返します。そのため、!== false
で比較します。str_contains($haystack, $needle)
は、$haystack
内に$needle
が含まれている場合、true を返します。そうでなければ false を返します。
重要なポイント
strpos()
は文字列の位置を返すため、文字列内での位置が重要な場合は使用します。str_contains()
は単純に含まれているかどうかをチェックするだけなので、パフォーマンス面で若干優れています。- 大文字小文字を区別しない検索を行う場合は、
stripos()
やstr_icontains()
を使用します。
- 正規表現を用いたより複雑なパターンマッチングが必要な場合は、
preg_match()
関数を使用します。 - 複数の単語を検索する場合は、複数の
strpos()
やstr_contains()
を組み合わせるか、正規表現を使用します。
PHP での文字列検索: strpos() と str_contains() の解説
コード例の説明
<?php
$haystack = "これはテスト用の文字列です";
$needle = "テスト";
if (strpos($haystack, $needle) !== false) {
echo "文字列の中に 'テスト' という単語が含まれています";
} else {
echo "文字列の中に 'テスト' という単語は含まれていません";
}
?>
- $haystack: 検索対象の文字列を格納する変数です。この例では "これはテスト用の文字列です" という文字列が入っています。
- $needle: 検索する単語を格納する変数です。この例では "テスト" という単語が入っています。
- !== false: strpos() の戻り値が false でない場合、つまり $needle が見つかった場合に条件が成立します。
<?php
$haystack = "これはテスト用の文字列です";
$needle = "テスト";
if (str_contains($haystack, $needle)) {
echo "文字列の中に 'テスト' という単語が含まれています";
} else {
echo "文字列の中に 'テスト' という単語は含まれていません";
}
?>
コードの動作
どちらのコードも、指定された文字列 ($haystack) 内に特定の単語 ($needle) が含まれているかどうかをチェックします。
- strpos() の戻り値は整数または false であり、false と厳密に比較する必要があります。
- str_contains() の戻り値は真偽値 (true または false) です。
PHP での文字列検索の代替方法
strpos() と str_contains() 以外の方法
これまで、strpos()
と str_contains()
を使用した文字列検索について説明しました。しかし、これ以外にもいくつかの方法があります。
正規表現を用いた検索: preg_match()
- より複雑なパターンマッチングを行うことができます。
- 大文字小文字の無視、単語境界の指定など、柔軟な検索が可能。
<?php
$haystack = "これはテスト用の文字列です";
$pattern = "/テスト/";
if (preg_match($pattern, $haystack)) {
echo "文字列の中に 'テスト' という単語が含まれています";
} else {
echo "文字列の中に 'テスト' という単語は含まれていません";
}
?>
explode() を使った検索
- 文字列を特定の区切り文字で分割し、配列に変換して検索します。
- 単語単位での検索に適しています。
<?php
$haystack = "これは テスト 用の 文字列 です";
$needle = "テスト";
$words = explode(" ", $haystack);
if (in_array($needle, $words)) {
echo "文字列の中に 'テスト' という単語が含まれています";
} else {
echo "文字列の中に 'テスト' という単語は含まれていません";
}
?>
strstr()
- 検索文字列が見つかった位置から文字列の末尾までを返します。
- 単純な検索には使用できますが、strpos() と比べて柔軟性が低い。
<?php
$haystack = "これはテスト用の文字列です";
$needle = "テスト";
if (strstr($haystack, $needle)) {
echo "文字列の中に 'テスト' という単語が含まれています";
} else {
echo "文字列の中に 'テスト' という単語は含まれていません";
}
?>
どの方法を選ぶべきか
- シンプルな検索で、大文字小文字を区別しない場合は
str_contains()
が便利です。 - 単語単位での検索で、パフォーマンスが重要な場合は
explode()
とin_array()
の組み合わせが効率的です。 - 複雑なパターンマッチングが必要な場合は
preg_match()
が強力です。 - 単純な検索で、見つかった位置からの文字列が必要な場合は
strstr()
を使用できます。
これらの方法を状況に応じて使い分けることで、効率的で柔軟な文字列検索を実現できます。
注意:
explode()
は空白文字で分割するため、単語間に複数の空白がある場合や、句読点を含む場合は注意が必要です。- 正規表現は強力ですが、複雑なパターンを扱う場合は理解とテストが必要です。
php string substring