PHP

【PHPの基礎】特定の文字列の検索方法をマスターしよう!(strpos,strstr,preg_match)

今回解決できる内容!

✔️文字列の検索方法は?

✔️それぞれの関数の使い分け

今回は文字列の検索が出来る関数についてご説明します!

関数の基礎に関しては下記の記事を参考にして下さい!

関数
【PHPの基礎】関数をマスターしよう! 今回解決できる内容! ✔️関数とはなんだろう? ✔️関数の使い方は? ...

独学がつらくなった方は下記をご覧ください!

>>【初心者必見!】無料体験ができるプログラミングスクールをご紹介!

strpos関数:特定の文字列の位置を返す

strops関数は何文字目に検索対象の文字が存在するかを返します。検索した文字列が見つからなかった場合はFALSEを返します。

書き方は下記の通りです。

strpos(検索対象の文字列, 検索する文字列 [, 開始位置] )

実際の例を確認してみましょう!

<?php

echo strpos('sarapuro_PHP', '_');

?>

結果は下記の通りです。

実際の開発では検索文字列の有無を条件分岐する場合が多いので、そちらも記載します。

<?php

$str='sarapuro_PHP';
if(strpos($str, '_')!==false)
{
    echo '文字列が存在します';
}else{
    echo '文字列が存在しません';
}

?>

結果は下記の通りです。

アルファベットの大文字、小文字を区別するので、完全に一致する文字列で検索しましょう。

strstr関数:検索文字列以降を返す

strstr関数は検索対象の文字列以降の文字列を返します。検索した文字列が見つからなかった場合はFALSEを返します。

書き方は下記の通りです。

strstr(検索対象の文字列, 検索する文字列)

実際の例を確認してみましょう!

<?php

echo strstr('sarapuro_PHP', '_');

?>

結果は下記の通りです。

大文字小文字を区別しないで検索したい場合は「stristr関数」を使うことで実現できます!

preg_match関数:正規表現による検索

preg_match関数は対象の文字列から正規表現パターンの文字列があるかないかを検索する関数です。戻り値はマッチした文字列がある場合は「1」、ない場合は「0」を返します。

書き方は下記の通りです。

preg_match(/正規表現によるパターン/ , 検索対象の文字列 [,マッチした文字列の配列])

1つ目の引数には、正規表現による文字列パターンを記述します。正規表現はスラッシュ(/)で囲むことが必須です。2つ目の引数は検索対象の文字列を記述します。

preg_matchの返り値として検索結果を返してくれます。

正規表現と返り値に関しては下記の記事を参考にして下さい。

>>【PHPの基礎】正規表現をマスターしよう!

>>【PHPの基礎】返り値をマスターしよう!

それでは実際のコードを確認してみましょう。

<?php

$text='サラプロは週5勤務中';

if(preg_match('/サラプロは週[0-9]/',$text)){
    echo '文字列が存在します';
}else{
    echo '文字列が存在しません';
}

?>

結果は下記の通りです。

$textに、「サラプロは週[数字]」という文字パターンが含まれる為、文字列が存在しますと記載されます。

パターンで検索できるので、電話番号やメアドなどのパターンが決まった文字列の検索に重宝します!

実践として郵便番号の確認を例に、実際のコードを見てみましょう!

<?php

$postalcode1='123-4567';
$postalcode2='4567-8910';

$result1=preg_match('/\A([0-9]{3})-([0-9]{4})\z/',$postalcode1);
$result2=preg_match('/\A([0-9]{3})-([0-9]{4})\z/',$postalcode2);

if($result1){
    echo 'マッチしています';
}else{
    echo 'マッチしていません';
}

echo'<br>';

if($result2){
    echo 'マッチしています';
}else{
    echo 'マッチしていません';
}

?>

結果は下記の通りです。

正規表現により、指定の数字が郵便番号の表記方法を一致するか確認するコードです。

正規表現の「\A([0-9]{3})-([0-9]{4})\z」についてです。

冒頭の「\A」と末尾の「\z」はそれぞれ文字列の始まりと終わりを示しています。これが無いと、郵便番号の前後に文字列が配置されている場合でもマッチしてしまいます。

次に[0-9]は0~9の中のどれか1文字を、{3}は繰り返しの回数を示します。[0-9]{3}により、0~9の中のどれか1文字を3回繰り返すことになります。

[0-9]{4}は先程と同様に0~9の中のどれか1文字を4回繰り返すことになります。

これらの表記にマッチしているのは「$postalcode1」である為、if文の条件分岐の結果は上記の通りになります。

if文の基本に関しては、下記の記事を参考にして下さい

>>【PHPの基礎】if文をマスターしよう!

独学がツラくなった方へ

まとめ

今回解説した内容

✅strpos関数:特定の文字列の位置を返す

✅strstr関数:検索文字列以降を返す

✅preg_match関数:正規表現による検索

今回は以上になります。

文字列検索は様々な場面で用いられます。今回で是非マスターしましょう!

PHPにおける文字列操作に関しては下記の記事を参考にして下さい!

文字列操作のまとめ
【PHPの基礎】PHPにおける文字列操作のまとめ!(連結|検索|置換|分割|切り出し) 今回解決できる内容 ✔️PHPにおける文字列操作をまとめて知りたい! 今回はPHPにおける...