プログラミング、フリーダイビング、ブロックチェーンのブログ

プログラミング道場

私がオススメするプログラミング教材です

私がおすすめするプログラミング教材のまとめ【書籍】

目次1 これからエンジニアになりたい人へ向けた本2 プログラミング言語3 アプリ開発4 サーバー、インフラ、セキュリティなど5 機械学習系6 ゲーム開発7 データベース8 デザイン9 組織作り10 自作シリーズ11 その他12 おまけ これ ...

続きを見る

【PHP入門】特定の文字列を含むか検索する方法

更新日:

記事の内容


この記事では、PHPで文字列を検索する方法を説明します。
strpos, mb_strpos, stripos, strrpos, strripos, strstr, stristr, strpbrk, preg_matchについて見ていきます。
PHPのバージョンは、7系です。

strpos

文字列内の部分文字列が最初に現れる場所を見つけてくれる関数です。
戻り値で判定する場合は、必ず「===」を使うようにしましょう。
なぜならば、「==」による緩い比較だと、0がfalseだと判定されてしまうからです。
0番目に目的の文字列が見つかった場合、trueと判定して欲しいはずです。

<?php
# PHP_EOLは改行コードです
# strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int
# strpos ( 検索対象の文字列, 検索したい文字列, offset) : 文字列はintです
# offsetを指定すると、文字列内での検索開始位置がその位置になります
# 負のoffsetを指定すると、文字列の末尾からこの数だけ戻った場所から検索を開始します
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
var_dump($pos);
// int(0)
if ($pos === false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'a' が文字列 'abc' の中で見つかりました
echo PHP_EOL;
# 「==」で比較した場合は、$posが0の場合に思ったように動作しません
if ($pos == false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'a' は、文字列 'abc' の中で見つかりませんでした
echo PHP_EOL;
# offsetを指定すると、文字列内での検索開始位置がその位置になります
$mystring = 'abcabc';
$findme = 'a';
$offset = 1;
$pos = strpos($mystring, $findme, $offset);
var_dump($pos);
// int(3)
if ($pos === false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'a' が文字列 'abcabc' の中で見つかりました
echo PHP_EOL;

mb_strpos

文字列内の部分文字列が最初に現れる場所を見つけてくれる関数です。
mb_は、「マルチバイト」の略です。
マルチバイト文字(ひらがな、漢字)などにも対応しています。
strpos関数を拡張したものです。
マルチバイト文字をstrposで検索した場合の結果と合わせて確認して下さい。

<?php
# PHP_EOLは改行コードです
# mb_strpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]] ) : int
# mb_strpos ( 検索対象の文字列, 検索したい文字列, offset, 文字コード) : 文字列はintです
# offsetを指定すると、文字列内での検索開始位置がその位置になります
# 負のoffsetを指定すると、文字列の末尾からこの数だけ戻った場所から検索を開始します
$mystring = 'こんにちは';
$findme = 'こ';
$pos = mb_strpos($mystring, $findme);
var_dump($pos);
// int(0)
if ($pos === false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'こ' が文字列 'こんにちは' の中で見つかりました
echo PHP_EOL;
# 「==」で比較した場合は、$posが0の場合に思ったように動作しません。
if ($pos == false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'こ' は、文字列 'こんにちは' の中で見つかりませんでした
echo PHP_EOL;
# offsetを指定すると、文字列内での検索開始位置がその位置になります
$mystring = 'こんにちは、にわとりさん';
$findme = 'に';
$offset = 1;
$pos = mb_strpos($mystring, $findme, $offset);
var_dump($pos);
// int(2)
$offset = 3;
$pos = mb_strpos($mystring, $findme, $offset);
var_dump($pos);
// int(6)
if ($pos === false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'に' が文字列 'こんにちは、にわとりさん' の中で見つかりました
echo PHP_EOL;
# strposで、マルチバイト文字を試してみます
# $posに入っている数字が、12になっているので誤りです
$mystring = 'こんにちは';
$findme = 'は';
$pos = strpos($mystring, $findme);
var_dump($pos);
// int(12)
if ($pos === false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
echo PHP_EOL;
// 文字列 'は' が文字列 'こんにちは' の中で見つかりました

stripos

文字列内の部分文字列が最初に現れる場所を見つけてくれる関数です。
strposとは異なり、striposは大文字小文字を区別しません。

<?php
# PHP_EOLは改行コードです
# strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int
# strpos ( 検索対象の文字列, 検索したい文字列, offset) : 文字列はintです
# offsetを指定すると、文字列内での検索開始位置がその位置になります
# 負のoffsetを指定すると、文字列の末尾からこの数だけ戻った場所から検索を開始します
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
var_dump($pos);
// int(0)
if ($pos === false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'a' が文字列 'abc' の中で見つかりました
echo PHP_EOL;
# 「==」で比較した場合は、$posが0の場合に思ったように動作しません
if ($pos == false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'a' は、文字列 'abc' の中で見つかりませんでした
echo PHP_EOL;
# offsetを指定すると、文字列内での検索開始位置がその位置になります
$mystring = 'abcabc';
$findme = 'a';
$offset = 1;
$pos = strpos($mystring, $findme, $offset);
var_dump($pos);
// int(3)
if ($pos === false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'a' が文字列 'abcabc' の中で見つかりました
echo PHP_EOL;

strrpos

文字列中に、ある部分文字列が最後に現れる場所を探します。

<?php
# PHP_EOLは改行コードです
# strrpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int
# strrpos ( 検索対象の文字列, 検索したい文字列, offset) : 文字列はintです
# offsetを指定すると、文字列内での検索開始位置がその位置になります
# 負のoffsetを指定すると、文字列の末尾からこの数だけ戻った場所から検索を開始します
$mystring = 'abca';
$findme = 'a';
$pos = strrpos($mystring, $findme);
var_dump($pos);
// int(3)
if ($pos === false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'a' が文字列 'abca' の中で見つかりました
echo PHP_EOL;
# 「==」で比較した場合は、$posが0の場合に思ったように動作しません。
if ($pos == false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'a' が文字列 'abca' の中で見つかりました
echo PHP_EOL;
# offsetを指定すると、文字列内での検索開始位置がその位置になります
$mystring = 'abcabcabc';
$findme = 'a';
$offset = 2;
$pos = strrpos($mystring, $findme, $offset);
var_dump($pos);
// int(6)
if ($pos === false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'a' が文字列 'abcabc' の中で見つかりました
echo PHP_EOL;

strripos

大文字小文字を区別せずに、文字列が最後に現れた位置を探します。
strrposと異なり、strriposは大文字小文字を区別しません。

<?php
# PHP_EOLは改行コードです
# strripos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int
# strripos ( 検索対象の文字列, 検索したい文字列, offset) : 文字列はintです
# offsetを指定すると、文字列内での検索開始位置がその位置になります
# 負のoffsetを指定すると、文字列の末尾からこの数だけ戻った場所から検索を開始します
$mystring = 'abcA';
$findme = 'a';
$pos = strripos($mystring, $findme);
var_dump($pos);
// int(3)
if ($pos === false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'a' が文字列 'abcA' の中で見つかりました
echo PHP_EOL;
# 「==」で比較した場合は、$posが0の場合に思ったように動作しません。
if ($pos == false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'a' が文字列 'abcA' の中で見つかりました
echo PHP_EOL;
# offsetを指定すると、文字列内での検索開始位置がその位置になります
$mystring = 'abcabcAbc';
$findme = 'a';
$offset = 2;
$pos = strripos($mystring, $findme, $offset);
var_dump($pos);
// int(6)
if ($pos === false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
}
// 文字列 'a' が文字列 'abcabcAbc' の中で見つかりました
echo PHP_EOL;

strstr

文字列が最初に現れる場所を含めて、そこから文字列の終わりまでを返します。

<?php
# PHP_EOLは改行コードです
# strstr ( string $haystack , mixed $needle [, bool $before_needle = FALSE ] ) : string
# strstr ( 対象文字列, 探したい文字列) : 戻り値はstring
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain, PHP_EOL;
// @example.com
$text = strstr($email, 'a');
echo $text, PHP_EOL;
// ame@example.com
$text = strstr($email, 'A');
echo $text, PHP_EOL;
// 何も表示されません

stristr

文字列が最初に現れる場所を含めて、そこから文字列の終わりまでを返します。
大文字と小文字を区別しません。

<?php
# PHP_EOLは改行コードです
# stristr ( string $haystack , mixed $needle [, bool $before_needle = FALSE ] ) : string
# stristr ( 対象文字列, 探したい文字列) : 戻り値はstring
$email = 'name@example.com';
$domain = stristr($email, '@');
echo $domain, PHP_EOL;
// @example.com
$text = stristr($email, 'a');
echo $text, PHP_EOL;
// ame@example.com
$text = stristr($email, 'A');
echo $text, PHP_EOL;
// ame@example.com

strpbrk

文字列の中から任意の文字を探します。
見つかった文字から始まる文字列、あるいは見つからなかった場合に FALSE を返します。

<?php
# PHP_EOLは改行コードです
# strpbrk ( string $haystack , string $char_list ) : string
# strpbrk ( 対象文字列, 探したい文字列)
# 見つかった文字から始まる文字列、あるいは見つからなかった場合に FALSE を返します。
$text = 'Hello, Sum. This is a simple text.';
echo strpbrk($text, 'mi'), PHP_EOL;
// m. This is a simple text.
echo strpbrk($text, 'S'), PHP_EOL;
// Sum. This is a simple text.
echo strpbrk($text, 's'), PHP_EOL;
// s is a simple text.

preg_match

正規表現によるマッチングを行います。

<?php
# PHP_EOLは改行コードです
# 正規表現によるマッチングを行います
# preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) : int
# preg_match ( 正規表現, 対象文字列, マッチした文字列) : 戻り値はintです
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
echo "A match was found.", PHP_EOL;
} else {
echo "A match was not found.", PHP_EOL;
}
# A match was found.
if (preg_match("/php/i", "PHP is the web scripting language of choice.", $match)) {
echo "A match was found.", PHP_EOL;
} else {
echo "A match was not found.", PHP_EOL;
}
# A match was found.
var_dump($match);
// array(1) {
// [0]=>
// string(3) "PHP"
// }

PHPをより詳しく勉強したい人には、この記事がオススメです

PHPの学習でおすすめの本と動画【2024年最新】

▼ Laravelについてはこの記事で、バージョンごとに紹介しています 目次1 動画教材2 初心者向け【入門編】3 中級者向け 動画教材 【PHP入門】2ちゃんねる掲示板クローンを作りながらPHPとMySQLの基礎と本質をマスターするPHP ...

続きを見る


Laravelをより詳しく勉強したい人には、この記事がオススメです

Laravelの学習でおすすめの本と動画【2024年最新】

目次1 動画教材2 Laravel63 Laravel84 Laravel9 動画教材 【Laravel】【Vue.js3】で【CRM(顧客管理システム)】をつくってみよう ▼ 興味がある方は、画像をクリック 受講者向けアンケートでご要望の ...

続きを見る


WordPressをより詳しく勉強したい人には、この記事がオススメです

WordPressの学習でおすすめの本【2023年最新】

目次1 初心者向け2 中級者向け 初心者向け いちばんやさしいWordPressの教本 第4版 5.x対応 これからワードプレスを始める初心者にオススメの本です。 手早くサイトを作りたい人は、この本を買いましょう^^ 非常にわかりやすいです ...

続きを見る


Rubyをより詳しく勉強したい人には、この記事がオススメです

Rubyの学習でおすすめの本と動画【2024年最新】

▼ Ruby on Railsについては、この記事で紹介しています 目次1 動画教材2 初心者向け【入門編】3 中級者向け4 上級者向け 動画教材 "ちゃんと" Ruby を学ぼう! ー オブジェクト指向機能ってなんだ? ▼ 興味がある方は ...

続きを見る


Javaをより詳しく勉強したい人には、この記事がオススメです

Javaの学習でおすすめの本と動画【2024年最新】

▼ Spring Bootの勉強をしたい人には、この記事がおすすめです 目次1 動画教材2 初心者向け3 中級者向け 動画教材 動画でわかる Java入門講座 基本~オブジェクト編 ▼ 興味がある方は、画像をクリックして下さい 「初心者向け ...

続きを見る


Gitをより詳しく勉強したい人には、この記事がオススメです

Gitの学習でおすすめの本と動画【2024年最新】

目次1 動画教材2 漫画?でわかりやすく学ぶ入門書の定番3 初心者向け4 中級者向け5 上級者向け 動画教材 もう怖くないGit!チーム開発で必要なGitを完全マスター ▼ 興味がある方は、画像をクリック Gitの基本コマンド、ブランチやマ ...

続きを見る


Perlをより詳しく勉強したい人には、この記事がオススメです

Perlの学習でおすすめの本と動画【2024年最新】

目次1 動画教材2 初心者向け3 中級者向け 動画教材 Learn Perl 5 By Doing It ▼ 興味がある方は、画像をクリック 英語版です。 Webスクレイピングからデータの修正まで、実際に使えるPerlプログラムを作成しなが ...

続きを見る


ゼロからWebエンジニアになりたい人には、この記事がオススメです

ゼロからWebエンジニアとして就職する方法【何もない自分に積み上げていく】

ちまたには、「エンジニアになるための情報」で溢れかえっています。 ジョージさんが考える「Webエンジニアになる方法」を教えて下さい。 目次1 私が定義するWebエンジニア2 必ずやるべきこと3 推奨されること4 まとめ 私が定義するWebエ ...

続きを見る


独学で実務っぽい経験を積みたい人には、この記事がオススメです

エンジニアが独学で実務経験っぽいことを学ぶ方法

エンジニアとして就職するためには実務経験が大事だと聞いていますが、就職しないことには実務経験を積むことができません。 どうやって、最初の実務経験を積んだらいいでしょうか? 目次1 スクールの理想と現実2 IT業界が抱える矛盾点3 擬似的に実 ...

続きを見る

-PHP, プログラミング

S