【PHP入門】文字列の置換 | str_replace・str_ireplace・strtr

PHPでは、関数を使用して文字列を指定した文字列に置換したり、指定した範囲で文字列を置換することが可能です。

この記事では、

  • 一致した文字列を置換する方法
  • 一致した部分文字列を置換する方法
  • 指定した範囲で置換する方法
  • 正規表現で文字列を置換する方法
  • マルチバイト文字列を置換する方法

などの基本的な内容から、応用的な使い方に関しても解説していきます。

今回はそんな文字列を置換する方法について、わかりやすく解説します。

一致した全ての文字列を置換

str_replace関数とは

検索した文字列に一致した全ての文字列を置換するにはstr_replace関数を使用します。

たとえば「りんご,オレンジ,メロン,りんご」という文字列の中から、「りんご」という文字列を「バナナ」に変えたいときにはstr_replace関数を使用します。

書き方:

str_replace( $検索文字列 , $置換後文字列 , $検索対象文字列 [, int $count ] )

引数:
第一引数に検索文字列を指定し、第二引数に置換文字列を指定します。第三引数には検索対象の文字列を指定し、第四引数には文字列が一致して置換が行われた箇所の個数が格納されます。

返り値:
置換後の文字列または配列を返します。

str_replace関数の使い方

以下にstr_replace関数を使用して、一致した文字列を全て置換する方法を記述します。

サンプルプログラム1

$fruits = 'りんご,オレンジ,メロン,りんご';

//指定した文字列が一致したら置き換える
$replace = str_replace('りんご', 'バナナ', $fruits);

echo $replace;

実行結果:

バナナ,オレンジ,メロン,バナナ

このサンプルプログラムでは「りんご,オレンジ,メロン,りんご」という文字列から、str_replace関数を使用して「りんご」という文字列があったら「バナナ」に置き換えています。

str_replace関数は配列の値を置換することもできます。

また、第四引数に$カウント値を指定すると、置換した個数が格納されます。

サンプルプログラム2

$fruits = ['りんご', 'オレンジ', 'メロン', 'りんご', 'パイナップル'];

$replace = str_replace('りんご', 'ばなな', $fruits, $count);

print_r($replace);

echo '置換した回数: '.$count;

実行結果:

Array
(
    [0] => ばなな
    [1] => オレンジ
    [2] => メロン
    [3] => ばなな
    [4] => パイナップル
)
置換した回数: 2

大文字小文字を区別しないで置換

str_ireplace関数とは

検索対象文字列の大文字小文字を区別しないで置換するにはstr_ireplace関数を使用します。

書き方:

str_ireplace( $検索文字列 , $置換後文字列 , $検索対象文字列 [, int $count ] )

引数:
第一引数に検索する文字列を指定し、第二引数に置換後の文字列を指定します。

第三引数には検索対象の文字列を指定し、第四引数には文字列が一致して置換が行われた箇所の個数が格納されます。

返り値:
str_ireplace関数は、置換した文字列または配列を返します。

str_ireplace関数の使い方

以下にstr_ireplace関数を使用して、一致した文字列を全て置換する方法を記述します。

サンプルプログラム

/* str_replace */
$fruits = 'apple orange melon APPLE';

//指定した文字列が一致したら置き換える
$replace = str_replace('apple', 'banana', $fruits);

echo $replace.'<br>';

/* str_ireplace */
$fruits = 'apple orange melon APPLE';

//指定した文字列が一致したら置き換える
$replace = str_ireplace('apple', 'banana', $fruits);

echo $replace;

実行結果:

banana orange melon APPLE
banana orange melon banana

実行結果のとおりstr_replace関数の場合は大文字小文字が区別され、置換後に指定した文字列が小文字で変換対象文字列が大文字の場合は置換されていません。

文字の変換、部分文字列の置換

strtr関数とは

文字の変換または、部分文字列の置換を行うにはstrtr関数を使用します。

書き方:

string strtr( $検索対象文字列 , $検索文字列 , $置換後文字列 )

引数:
第一引数に検索対象の文字列を指定し、第二引数には検索対象の部分文字列を指定します。第三引数には置換後の文字列を指定します。

返り値:
変換後の文字列を返します。

strtr関数の使い方

以下にstrtr関数を使用して、部分文字列を検索して一致したら置換する方法を記述します。

サンプルプログラム

$str = 'This year is 2016 years.';
 
//部分文字列を検索して置換する
$result = strtr($str, '2016', '2017');
 
echo $result;

実行結果:

This year is 2017 years.

指定した範囲で置換する

substr_replace関数とは

指定した範囲の一部の文字列のみを置換したい場合は、substr_replace関数を使用します。

書き方:

substr_replace( $検索対象文字列 , $置換後文字列 , $置換位置 [, $置換する範囲 ] )

引数:
第一引数に検索対象の文字列を指定し、第二引数に置換後の文字列を指定します。

第三引数に置換する文字列の位置を指定し、第四引数を指定した場合は置換位置からの置換する文字数の範囲を指定します。

substr_replace関数の使い方

以下にsubstr_replace関数を使用して、指定位置からの文字列を置換する方法を記述します。

サンプルプログラム1

$str = 'ABCDE01234';

//指定した位置の文字列から'#'に置き換える
$replace = substr_replace($str, '#', 5);

echo $replace;

実行結果:

実行結果
ABCDE#

サンプルでは置換対象文字列の5番目から’#’に置き換えています。

置換する文字列の範囲を指定する場合は、substr_replaceの第四引数に置換する範囲を指定する必要があります。

以下に文字列を置換する範囲を指定する方法を記述します。

サンプルプログラム2

$str = 'ABCDE01234';

//指定した位置から3文字分'#'に置き換える
$replace = substr_replace($str, '#', 5, 3);

echo $replace;

実行結果:

ABCDE#34

マルチバイト文字列を置換

mb_ereg_replace関数とは

マルチバイト文字列の正規表現による置換はmb_ereg_replace関数を使用します。

マルチバイト文字とは1文字が2バイト以上のデータで表現される文字のことを指します。

通常半角英数字は1バイトで表しますが漢字やひらがななどの全角文字は2バイトのデータとして表します。

書き方:

string mb_ereg_replace( $検索文字列 , $置換後文字列 ,$置換対象文字列  [, string $option = "msr" ] )

引数:
第一引数に検索文字列を指定し、第二引数に置換後の文字列を指定します。

第三引数には置換対象文字列を指定し、第四引数には$optionを指定します。$optionについては以下のパターンを指定できます。

i:大文字小文字を区別しない
x:空白を無視
m:マルチラインモード
p:POSIXモード
e:置換文字列がPHPの式として評価される

mb_ereb_replace関数の使い方

以下にmb_ereg_replace関数を使用して、マルチバイト文字列を置換する方法を記述します。

サンプルプログラム

$str = '1234567890';
 
//マルチバイト文字列の置換を行う
$replace = mb_ereg_replace('1', 'A', $str);
 
echo $replace;

実行結果:

A234567890

正規表現で置換する

指定した正規表現にマッチした文字列を置換したい場合はpreg_replace関数を使用します。

preg_replace関数は引数に指定した正規表現パターンをもとに一致した文字列があったら置換後の文字列に置き換えます。

以下にpreg_replace関数を使用して正規表現で置換するサンプルを紹介します。

サンプルプログラム

$str = '現在の西暦は2016年です';
 
$str_grep = preg_replace('/(西暦は)2016/', '$1 2017', $str);
 
echo $str_grep;

実行結果:

現在の西暦は 2017年です

文字列を正規表現を使用してさまざまなパターンで置換する方法については、以下の記事で詳しく解説していますのでぜひ参考にしてくださいね!

PHPを継続的に学習するコツ

PHPの学習をしていて、わからないところが多く何回も調べながらやるのは正直、嫌になってしまいますよね。そこで、どのようにすれば継続的に学習を続けて行けるのかそのコツをご紹介します。

目的を明確にする

まずは、なぜPHPを学んでいるのか明確にしましょう。例えば、PHPを学んで

  • Webサイトが作りたい
  • WordPressの編集がしたい
  • エンジニアとして転職したい
  • フリーランスを目指したい


など、目的は色々あると思います。

この目的を明確にすることがとても大事で、PHPを学ぶ学習意欲に繋がっていきます。目的がないまま学習をしていると、学習すること自体が目的になってしまい、ゴールのない果てしない道を進むことになります。その結果、挫折してしまう人が多いのが現状となっています。

そうならないためにも、PHPを学ぶ目的は言えるようにしましょう。もし言えない場合は、学ぶプログラミング言語自体間違っている可能性もあります。なので、しっかり目的から学んでいる言語があっているか確認しましょう。

学習プランを決める

目的が明確になったら、次に学習プランを立てましょう。この学習プランを立てずに学習している人が多いのですが、学習プランがないと自分が今どのくらい進んでいて、後どのくらい学習をすればいいのか見えないので、学習をすること自体がきつく長続きしません。

学習を継続的に続けるためには学習プランは必須とも言えます。いつまでに、どのレベルになっていて、最終的なゴールはいつ達成するのかはしっかり決めましょう。

先生を見つける

「何度もエラーになって、自分で調べては修正する」この繰り返しがPHPを学習していると起こります。調べてもよくわからないし、時間もかかってしまってプラン通りに学習が進まないというのは当然のように起こります。

調べて直したけどうまく動かないしどうなってんの

このように思い、学習をすること自体に嫌気が指して挫折してしまう人も多いです。

そうならないためにも、「先生」を見つけることが大事になります。先生と言ってもそう簡単に探せそうにないですよね。最近ではSNSでもコミュニティーが増え、相談しやすい環境が増えてきています。こういったコミュニティーや勉強会を利用して先生を見つけるのも一つの手です。

自分に投資することも大事

学習サイトやアプリなど、無料で学習できる環境が整ってはいるものの自分に投資して学習をすることも大事です。本や有料学習サイトは、無料では学べない範囲の学習や機能が付いているので、効率的に学習をすることが可能です。

そして、投資のもう一つの方法がプログラミングスクールで学ぶことです。

独学と違い、プログラミングスクールでは上で紹介した学習を継続するためのサポートが徹底されているので、最も効率の良い学び方と言えるでしょう。先生も自分で探す必要がないので、エラーなどで躓いて時間がかかる心配もありません。

ですが、当然いきなりスクールに入るのは抵抗がありますよね。

その場合は、弊社で行っている無料体験レッスンへ参加してみてください。この無料体験レッスンでは、なぜPHPを学ぶのかその目的をヒアリングして、本当にPHPを学ぶべきなのか、その学習プランはどのように立てるのかなどの提案をしています。

目的をヒアリングすることで、あなたに最適な言語や学習プランが分かるので、最速でエンジニアを目指せるイメージがわきます。

手軽にしかもオンラインでも受けられるので、ぜひ一度目的を明確にしてみましょう。

無料体験レッスンに申し込む

まとめ

ここではさまざまな方法で、文字列を置換する方法について紹介しました。

文字列の中から指定した文字列を置換したり、文字列の範囲を指定して置換することはよくありますので、この機会に覚えておきましょう。

もし、文字列を置換する方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。