文字列の検索

PHPのシンタックス

  1. HOME
  2. 文字列の検索

文字列を検索する

文字列を検索する関数のstrpos()またはmb_strpos()は、検索して最初に見つかった位置を返します。
マルチバイト文字の検索にはmb_strpos()を使い、文字の位置は0から数え、ない場合はfalseを返す。
この時、if文では0はfalseと判定されるので===演算子を使って厳密な判定を行う。

※最後に見つかった位置を返す関数は strrpos()及び mb_strrpos()もある

文字列が含まれている位置を調べる

「博多」は「福岡県福岡市博多区」の6文字目にあります。
「天神」は「福岡県福岡市博多区」には含まれていません。
「PHP」は「PHP,JavaScript,Ruby」の0文字目にあります。
「c++」は「PHP,JavaScript,Ruby」には含まれていません。
<?php
function check ($target,$str) {
  $result = mb_strpos($target,$str);
  if ($result === false) {
    echo "「{$str}」は「{$target}」には含まれていません。\n <br>";
  } else {
    echo "「{$str}」は「{$target}」の{$result}文字目にあります。\n <br>";
  }
}
check("福岡県福岡市博多区","博多");
check("福岡県福岡市博多区","天神");
check("PHP,JavaScript,Ruby","PHP");
check("PHP,JavaScript,Ruby","c++");
?>

「不可」が含まれている個数を調べる

mb_substr_countは検索した文字列が何個含まれているかを返す関数。下のソースでは「不可」が3個以上含まれていると再試験にしている。
合格です
不可が3個あるので、再試験です。
不可が4個あるので、再試験です。
合格です
<?php
function check2($target2)
{
  $result = mb_substr_count($target2, "不可");
  if ($result >= 3) {
    echo "不可が{$result}個あるので、再試験です。\n <br>";
  } else {
    echo "合格です\n <br>";
  }
}
check2("優,不可,良,可,良,可");
check2("可,優,不可,不可,良,不可");
check2("不可,可,不可,不可,良,不可");
check2("可,可,不可,良,良");
?>

見つかった位置から後ろの文字列を取り出す

mb_strstr()は特定の文字を検索して最初に見つかった位置から後ろにある文字を取り出す関数です。大文字小文字を区別しないで検索するなら mb_stristr()を使います。見るからない場合はfalseが戻ってきます。
博多区1-1-1
福岡県福岡市博多区1-1-1
(not found)
<?php
function pickout($target3, $str3)
{
  $result = mb_stristr($target3, $str3);
  if ($result === false) {
    echo "(not found)\n <br>";
  } else {
    echo "{$result}\n <br>";
  }
}
pickout("福岡県福岡市博多区1-1-1", "博多区");
pickout("福岡県福岡市博多区1-1-1", "福岡");
pickout("福岡県福岡市博多区1-1-1", "東京");
?>

検索置換を行う

検索して置換する
str_replace($search,$replace,$subject,$count)

大文字小文字を区別せずに置換する
str_ireplace($search,$replace,$subject,$count)

※検索した文字を空白 "" に置換することで、見つかった文字を削除できる。
三匹の子豚がいる。
三匹の子牛がいる。
三匹の子猫がいる。
<?php
$subject = "三匹の子猫がいる。";
echo str_replace("猫","豚",$subject),"\n <br>";
echo str_replace("猫","牛",$subject),"\n <br>";
echo $subject;
?>

検索文字と置換文字を配列で指定する

str_replace()とstr_ireplace()では、第1引数と第2引数を配列で指定できる。つまり、複数の検索文字を置換したり設定が可能

"p"と"a"を"?"に置き換える

置換前:Do you want a piece of pumpkin pie, Katsumaru?
置換後:Do you w?nt ? ?iece of ?um?kin ?ie, K?tsum?ru?
置換個数:8
<?php
$search = array("p","a");
$subject = "Do you want a piece of pumpkin pie, Katsumaru?";
$result = str_ireplace($search,"?",$subject,$count);
echo "置換前:{$subject}","\n <br>";
echo "置換後:{$result}","\n <br>";
echo "置換個数:{$count}";
?>

それぞれ配列指定で名前と年齢をベルの文字に置換

置換前:担任の鈴木先生は35歳の英語担当です。
置換後:担任のA先生はx歳の英語担当です。
<?php
$search = ["鈴木", "35歳"];
$replace = ["A", "x歳"];
$subject = "担任の鈴木先生は35歳の英語担当です。";
$result = str_replace($search, $replace, $subject);
echo "置換前:{$subject}", "\n <br>";
echo "置換後:{$result}";