ITコラム

PHP 文字列 検索

PHP

2019.04.18

PHP【文字列】文字列の検索

PHP では、関数 strpos や preg_match を使用して文字列を検索することができます。
今回は PHP で文字列を検索する方法を紹介します。
 
尚、本サイトでは XAMPP( ザンプ )という開発環境を使用しています。
XAMPP のインストール方法や起動方法については以下の記事をご参照下さい。
PHP【 開発環境 】XAMPP インストール
PHP【 開発環境 】XAMPP の使い方

最終更新日:2019年4月18日

目次

1.strpos で文字列を検索
2.preg_match で文字列を検索
 

1.strpos で文字列を検索

strpos 関数は、文字列中のある文字列を検索する関数です。

実行すると、指定した文字列が最初に現れる位置が 検索対象文字列の 1 文字目を 0 とする数値で返ります。

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

strpos ( 検索対象文字列, 指定文字列 [, 検索開始位置 ] ) ;

第 1 引数には、検索対象となる文字列を指定します。

第 2 引数には、検索する文字列を指定します。

第 3 引数には、検索開始位置を検索対象文字列の 1 文字目を 0 とする数値で指定することができます。
第 3 引数に負の数を指定すると、検索対象文字列の末尾から 数値分戻った位置が検索開始位置となります。

strpos のサンプル

strpos 関数を使用して 文字列を検索してみます。

下記のようなソースファイルを作成して ブラウザからアクセスすると、次のような表示になります。
( ソースファイルの作成方法についてはソースファイルを作成を、サーバの起動方法等についてはサーバを起動を、それぞれご参照下さい。)

<?php

  $str = "All is well that ends well.";
  echo strpos($str, "well");
  echo "<br><br>";
  echo strpos($str, "well", -5);

?>

「 echo 」は、データを出力するために使用する PHP の命令です。

「 strpos($str, “well”) 」では、検索対象文字列の中で 検索文字列の先頭の文字「 w 」が最初に現れる位置( 検索対象文字列の先頭文字 A を 0 とする数値で、スペースもカウントする )の 7 が返ります。

「 strpos($str, “well”, -5) 」では、検索開始位置を負の数値で指定しているので、末尾から 5 文字分遡った「 w 」から末尾までが検索対象となります。
そして、後ろの方にある 検索文字列 well の先頭の文字「 w 」の位置である 22 が返ります。

▲目次へ戻る

 

2.preg_match で文字列を検索

preg_match 関数は、文字列を正規表現で検索する関数です。

実行すると、指定した正規表現が含まれていた場合は「 1 」、含まれていなかった場合は「 0 」、正常に処理できなかった場合は「 false 」が返ります。

preg_match 関数は 次のように記述して使用します。

preg_match ( 正規表現, 検索対象文字列 [, $array [, オプション [, 検索開始位置 ] ] ] ) ;

第 1 引数には、検索する正規表現のパターンを指定します。

第 2 引数には、検索対象となる文字列を指定します。

第 3 引数には、配列変数を指定することができ、配列変数[0] にはパターン全体に合致した文字列が格納され、配列変数[1] 以降には 1 番目以降の各キャプチャ用サブパターンに合致した文字列がそれぞれ格納されます。

第 4 引数には、次のオプションを指定することができます。
・PREG_OFFSET_CAPTURE:各検索結果と共にオフセット値も返る( 第 3 引数の戻り値である文字列とオフセット値を 1 つの配列として、それが各戻り値分格納された 2 次元配列が返る )

第 5 引数には、検索開始位置を検索対象文字列の 1 文字目を 0 とする数値で指定することができます。

preg_match のサンプル

preg_match 関数を使用して文字列を検索し、パターンに合致した文字列が配列変数に格納されるようにしてみます。

下記のようなソースファイルを作成して ブラウザからアクセスすると、次のような表示になります。
( ソースファイルの作成方法についてはソースファイルを作成を、サーバの起動方法等についてはサーバを起動を、それぞれご参照下さい。)

<pre>
<?php

  $str = "0123456789";
  preg_match("/(01234)(56789)/", $str, $ary, PREG_OFFSET_CAPTURE);
  print_r($ary);

?>
</pre>

preg_match 関数の第 3 引数に配列変数を指定すると、パターン全体に合致した文字列及び各キャプチャ用サブパターンに合致した文字列が 指定した配列変数に格納されます。

そして 第 4 引数に「 PREG_OFFSET_CAPTURE 」を指定すると、第 3 引数で指定した配列変数は、検索で合致した文字列とそのオフセット値( 先頭文字の位置 )がペアで格納される 2 次元配列となります。

print_r 関数や <pre> ~ </pre> についてはprint_r で出力をご参照下さい。

▲目次へ戻る

SHARE

最新記事

img001

卒業生インタビュー

2019.08.28

【卒業生の声:田中さん】美容師からプログラマーへ転身!PCスキルゼロからチーム開発でリーダーを務めるまでに成長したその秘密に迫る

受講スクール プログラマカレッジ 受講期間 3ヶ月間 料金 無料 就職先 株式会社アニシス プログラマカレッジ卒業生の田中さんにお話しをお伺いしました! 目次 IT業界へ憧れ、PCスキルゼロからプログラマーを目指すー 独 […]

続きを見る

IMG_004

卒業生インタビュー

2019.08.20

【卒業生の声:渡邉さん】宮城の大学とプログラマカレッジへ通学を両立!限られた時間を有効活用し、希望するWEB系の会社へ内定。

受講スクール プログラマカレッジ 受講期間 3ヶ月間 料金 無料 就職先 某WEB系会社 プログラマカレッジ卒業生の渡邉さんにお話しをお伺いしました! 目次 新卒採用の切符を捨て、アイデアを形にできる仕事を目指す 質問が […]

続きを見る

無料相談する

INTERNOUS,inc. All rights reserved.