PHPで文字列探索!strpos関数の活用法5選

PHP strpos関数の徹底解説 PHP
この記事は約13分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

文字列を探索したい時、PHPのstrpos関数を知っていますか?

これを使えば、文字列の中から特定の部分を探し出すことが可能です。

この記事を読めば、PHPのstrpos関数を活用することができるようになります。

つまり、PHPで文字列探索が思いのままになるのです。それでは、早速進んでいきましょう。

●PHPとは

PHPは、ウェブサイトの動的な要素を制御するためのプログラミング言語の一つです。

例えば、フォームからの入力を受け取ったり、データベースから情報を取得したりするのに用いられます。

○PHPで扱うデータ型

PHPは、様々なデータ型を扱うことができます。

主なデータ型には、整数型(integer)、浮動小数点数型(float)、文字列型(string)、配列型(array)、オブジェクト型(object)、ブール型(boolean)などがあります。

そして、この中でも今回注目するのが「文字列型」です。

○PHPの基本的な文法

PHPの文法は、他のプログラミング言語と共通点を多く持ちつつも、独自の特徴もあります。

例えば、PHPでは変数名の先頭に$記号をつけます。また、文の終わりにはセミコロン(;)を置きます。

PHPのコードは<?phpで始まり、?>で閉じます。

これらの基本的な文法を理解することで、PHPのコードを読み書きすることができるようになります。

●PHPの関数とは

関数とは、特定の処理を行うためのコードの塊のことを指します。

PHPには多数の組み込み関数が存在し、これらを活用することで様々な処理を効率的に行うことが可能になります。

そして、その中の一つが「strpos関数」です。

○関数の作成方法

PHPで自作の関数を作成するには、functionキーワードを使用します。

その後ろに関数名を記述し、その後に丸括弧と中括弧を続けます。

丸括弧内には引数を指定でき、中括弧内には関数の処理を記述します。

○関数の使い方

関数を使うには、関数名を記述し、その後ろに丸括弧をつけます。丸括弧内には、必要に応じて引数を指定します。

そして、関数の戻り値は、変数に代入することも、直接処理に使用することもできます。

●PHPのstrpos関数とは

PHPの組み込み関数の中に、「strpos」という関数があります。

この関数は、文字列の中から指定した文字列が最初に現れる位置を検索し、その位置(インデックス番号)を返します。

ただし、この関数で注意しなければならないのは、PHPでは文字列の最初の位置を0と数える点です。

また、指定した文字列が見つからない場合は、strpos関数はfalseを返します。

○strpos関数の基本

strpos関数は次のように使用します。

$pos = strpos($haystack, $needle);

ここで、$haystackは検索対象の文字列、$needleは検索したい文字列です。

このコードでは、$haystack内で$needleが最初に現れる位置を検索し、その位置を$posに代入しています。

$needleが見つからない場合は、$posfalseとなります。

●strpos関数の使い方

それでは具体的な使い方をいくつか見ていきましょう。

○サンプルコード1:文字列内に特定の文字列が存在するか調べる

このコードでは、strpos関数を使って文字列内に特定の文字列が存在するか調べています。

この例では、’Hello, world!’から’world’を探し、存在すればその位置を表示します。

<?php
$text = 'Hello, world!';
$find = 'world';
$position = strpos($text, $find);

if ($position !== false) {
    echo "'{$find}' is found at position {$position} in '{$text}'.";
} else {
    echo "'{$find}' is not found in '{$text}'.";
}
?>

これを実行すると、’world’が’Hello, world!’の7番目の位置にあるため、’world is found at position 7 in ‘Hello, world!’と表示されます。

○サンプルコード2:大文字小文字を無視して文字列を検索する

次に、大文字と小文字を無視した文字列の検索を行ってみましょう。

PHPでは、stripos関数を使用することで大文字小文字を無視した検索が可能です。

<?php
$text = 'Hello, World!';
$find = 'WORLD';
$position = stripos($text, $find);

if ($position !== false) {
    echo "'{$find}' is found at position {$position} in '{$text}'.";
} else {
    echo "'{$find}' is not found in '{$text}'.";
}
?>

このコードを実行すると、大文字の’WORLD’が’Hello, World!’の7番目の位置にあると出力されます。

これは、stripos関数が大文字小文字を無視しているためです。

○サンプルコード3:特定の位置から文字列を検索する

strpos関数は、第三引数に検索を開始する位置を指定することができます。

これにより、特定の位置から文字列の検索を行うことができます。

<?php
$text = 'Hello, world, world!';
$find = 'world';
$position = strpos($text, $find, 10);

if ($position !== false) {
    echo "'{$find}' is found at position {$position} in '{$text}'.";
} else {
    echo "'{$find}' is not found in '{$text}'.";
}
?>

このコードを実行すると、10番目の位置からの検索なので、二つ目の’world’が見つかり、’world is found at position 13 in ‘Hello, world, world!”と表示されます。

○サンプルコード4:文字列が最初に現れる位置を取得する

このコードでは、strpos関数を使って文字列が最初に現れる位置を取得しています。

この例では、’Hello, world!’から’Hello’を探し、存在すればその位置を表示します。

<?php
$text = 'Hello, world!';
$find = 'Hello';
$position = strpos($text, $find);

if ($position !== false) {
    echo "'{$find}' is found at position {$position} in '{$text}'.";
} else {
    echo "'{$find}' is not found in '{$text}'.";
}
?>

これを実行すると、’Hello’が’Hello, world!’の0番目の位置にあるため、’Hello is found at position 0 in ‘Hello, world!”と表示されます。

○サンプルコード5:文字列が最後に現れる位置を取得する

PHPには、文字列が最後に現れる位置を検索する関数として、strrpos関数があります。

この例では、’Hello, world, world!’から’world’を探し、最後に現れる位置を表示します。

<?php
$text = 'Hello, world, world!';
$find = 'world';
$position = strrpos($text, $find);

if ($position !== false) {
    echo "'{$find}' is found at last position {$position} in '{$text}'.";
} else {
    echo "'{$find}' is not found in '{$text}'.";
}
?>

このコードを実行すると、最後に’world’が現れる位置は13番目なので、’world is found at last position 13 in ‘Hello, world, world!”と表示されます。

ここまでで、strpos関数の基本的な使い方を見てきました。

これらの例を参考に、自身のコードで活用してみてください。

●strpos関数の応用例

さて、前半で学んだ基本的な使い方を応用し、strpos関数を使った具体的なコーディングテクニックをいくつか見ていきましょう。

○サンプルコード6:文字列の位置に基づいて分割する

strpos関数を使用して、特定の文字列が現れる位置を特定し、それを基に元の文字列を分割する方法を紹介します。

ここでは、メールアドレスの文字列を’@’の位置で分割し、ユーザ名とドメイン名に分けるコードを作成します。

<?php
$email = 'user@example.com';
$at_position = strpos($email, '@');

$user = substr($email, 0, $at_position);
$domain = substr($email, $at_position + 1);

echo "User: {$user}, Domain: {$domain}";
?>

このコードを実行すると、’user@example.com’を’@’の位置で分割し、’User: user, Domain: example.com’と表示されます。

これにより、メールアドレスのユーザ名部分とドメイン部分を別々に扱うことが可能となります。

○サンプルコード7:文字列の一部を置換する

次に、strpos関数を使って特定の文字列を検索し、その位置を基に元の文字列の一部を置換する方法を見ていきましょう。

ここでは、’Hello, world!’の’world’を’PHP’に置換します。

<?php
$text = 'Hello, world!';
$find = 'world';
$replace = 'PHP';

$position = strpos($text, $find);
if ($position !== false) {
    $new_text = substr_replace($text, $replace, $position, strlen($find));
    echo $new_text;
} else {
    echo "{$find} is not found in '{$text}'.";
}
?>

このコードを実行すると、’Hello, world!’の’world’を’PHP’に置換した結果、’Hello, PHP!’と表示されます。

これらの例からもわかるように、strpos関数は特定の文字列を検索し、その位置情報をもとに文字列を操作する際に非常に有用です。

これらのテクニックを覚えておくと、さまざまな場面で役立つでしょう。

●注意点と対処法

strpos関数を使用する際の注意点としては、検索した文字列が見つからなかった場合、戻り値としてfalseを返すという特性があります。

しかし、このfalseは整数値の0と等価であるため、単純にif文で評価すると意図しない挙動を引き起こす可能性があります。

例えば、次のコードでは、’Hello, world!’から’Hello’を探していますが、その位置は0なので、’Hello is not found in ‘Hello, world!”と表示されてしまいます。

<?php
$text = 'Hello, world!';
$find = 'Hello';
$position = strpos($text, $find);

if ($position) {
    echo "'{$find}' is found at position {$position} in '{$text}'.";
} else {
    echo "'{$find}' is not found in '{$text}'.";
}
?>

これを防ぐには、厳密な比較演算子(!==)を使用して、検索した文字列が見つからなかった場合(つまり、strpos関数がfalseを返した場合)だけfalseと評価するようにします。

●カスタマイズ方法

strpos関数の基本的な使い方や注意点を学んだところで、さらに柔軟性を持たせるためのカスタマイズ方法について説明します。

ここでは、大文字小文字を区別せずに文字列を検索する方法と、特定の位置から文字列を検索する方法を紹介します。

○サンプルコード8:大文字小文字を区別せずに文字列を検索する

PHPには、大文字と小文字を区別せずに文字列を検索するための関数striposがあります。

この関数は、strpos関数と同様に2つの文字列を引数に取りますが、大文字と小文字を区別せずに文字列を検索します。

下記のコードは、’Hello, world!’から’HELLO’を大文字小文字を区別せずに検索し、その位置を表示するものです。

<?php
$text = 'Hello, world!';
$find = 'HELLO';

$position = stripos($text, $find);

if ($position !== false) {
    echo "'{$find}' is found at position {$position} in '{$text}'.";
} else {
    echo "'{$find}' is not found in '{$text}'.";
}
?>

このコードを実行すると、’HELLO’は’Hello, world!’の0の位置に存在すると表示されます。

これは、stripos関数が大文字と小文字を区別しないためです。

○サンプルコード9:特定の位置から文字列を検索する

strpos関数には、3つ目のオプションの引数があり、これを指定すると特定の位置から文字列を検索することができます。

下記のコードは、’Hello, world! Hello again!’から2つ目の’Hello’を検索し、その位置を表示します。

<?php
$text = 'Hello, world! Hello again!';
$find = 'Hello';

// 最初の'Hello'が見つかった位置 + 1から検索を開始
$position_first = strpos($text, $find);
$position_second = strpos($text, $find, $position_first + 1);

if ($position_second !== false) {
    echo "Second '{$find}' is found at position {$position_second} in '{$text}'.";
} else {
    echo "Second '{$find}' is not found in '{$text}'.";
}
?>

このコードを実行すると、2つ目の’Hello’は’Hello, world! Hello again!’の14の位置に存在すると表示されます。

これらのカスタマイズ方法を活用することで、より多様なシチュエーションに対応することが可能となり、PHPでの文字列探索が思い通りに進められます。

まとめ

この記事では、PHPで文字列探索を行うためのstrpos関数について詳しく解説しました。

初心者でも理解できるように基本的な使い方から始め、それに続いて応用例をいくつか示し、最後には注意点と対処法、そしてカスタマイズ方法について説明しました。

これらの知識を活用すれば、PHPでの文字列操作がよりスムーズに、そして効率的に行えるでしょう。

今後もPHPの学習に役立つ情報を提供していきますので、ぜひ引き続きご覧ください。