PHP の文字列を検索・置換する方法(str_replace, preg_replace)
新人
「PHPで文字列の中の特定の単語を別の単語に置き換える方法ってありますか?」
先輩
「PHPでは、文字列を置換するためにstr_replace
やpreg_replace
といった関数を使うことができます。」
新人
「なるほど、str_replace
とpreg_replace
の違いって何ですか?」
先輩
「str_replace
は単純な文字列の置換に使い、preg_replace
は正規表現を使ってより高度な置換ができます。それぞれ詳しく解説していきますね!」
1. PHPの文字列操作とは?
PHPは文字列を扱うのが得意な言語で、様々な関数が用意されています。文字列を結合したり、分割したり、検索したり、置換したりといった処理が簡単に行えます。
特に、文字列の一部を別の文字列に置き換えることは、Web開発ではよく使われる操作です。例えば、Webページのテンプレートの中で動的な値を差し替えたり、不適切な単語を伏せ字にする場合などに利用されます。
2. 文字列の検索と置換の基本的な考え方
文字列の検索と置換は、以下の流れで行われます。
- ① 置換したい単語を指定する
- ② 置き換える単語を指定する
- ③ 置換する対象の文字列を指定する
- ④ 置換結果を取得する
PHPでは、これを簡単に実現するための関数として str_replace
が用意されています。
3. str_replace 関数の使い方(簡単な例)
str_replace
関数を使うと、指定した文字列を別の文字列に置き換えることができます。基本的な使い方は以下の通りです。
<?php
$text = "今日は良い天気です。";
$new_text = str_replace("良い", "素晴らしい", $text);
echo $new_text;
?>
このコードを実行すると、以下のように出力されます。
今日は素晴らしい天気です。
このように、 str_replace
を使うことで簡単に文字列の置換ができます。
4. str_replace を使った複数の文字列置換
str_replace
は、複数の単語を一度に置換することも可能です。置換対象の単語を配列として指定することで、一括で置換することができます。
例えば、文章中の「良い」「天気」を、それぞれ「素晴らしい」「快晴」に置き換える場合は、次のように記述します。
<?php
$text = "今日は良い天気です。";
$search = ["良い", "天気"];
$replace = ["素晴らしい", "快晴"];
$new_text = str_replace($search, $replace, $text);
echo $new_text;
?>
このコードを実行すると、以下のように出力されます。
今日は素晴らしい快晴です。
このように、str_replace
を使えば複数の単語を一括で置換できるため、効率的に文字列の置換を行うことができます。
5. preg_replace の基本的な使い方(正規表現を使った置換)
preg_replace
は、正規表現を使って文字列を検索し、置換するための関数です。str_replace
とは異なり、特定のパターンに一致する文字列を置換できます。
例えば、文中の「数字(0~9)」をすべて「*」に置き換える場合は、次のように記述します。
<?php
$text = "電話番号は 090-1234-5678 です。";
$new_text = preg_replace("/[0-9]/", "*", $text);
echo $new_text;
?>
このコードを実行すると、以下のように出力されます。
電話番号は ***-****-**** です。
このように、preg_replace
を使うと、特定の文字パターンを指定して、簡単に置換することができます。
6. preg_replace でできる高度な文字列置換(具体例)
正規表現を利用すると、より高度なパターンで文字列を置換できます。例えば、文章中の「ひらがな」だけを削除する場合は、次のように記述します。
<?php
$text = "今日はとても良い天気ですね。";
$new_text = preg_replace("/[ぁ-ん]/u", "", $text);
echo $new_text;
?>
このコードを実行すると、以下のように出力されます。
今日良天気。
このように、preg_replace
を使うことで、特定の文字種のみを削除したり置換したりすることが可能になります。
7. str_replace と preg_replace の違い(使い分けのポイント)
PHPで文字列を置換する方法として、str_replace
と preg_replace
の2つの関数があります。それぞれの違いや使い分けのポイントを見ていきましょう。
str_replace の特徴
- 単純な文字列の置換に適している
- 正規表現を使用せずに簡単に置換できる
- 複数の文字列をまとめて置換することも可能
preg_replace の特徴
- 正規表現を使って高度なパターンの置換が可能
- 特定のルールに一致する文字列を一括で置換できる
- メールアドレスのマスキングや数字の削除など、複雑な処理が得意
例えば、特定の単語を別の単語に単純に置換する場合は str_replace
を使い、文中の特定のパターンをすべて置換したい場合は preg_replace
を使うのが適切です。
8. str_ireplace(大文字・小文字を区別せずに置換)の使い方
str_replace
は大文字・小文字を区別して置換しますが、大文字・小文字を区別せずに置換したい場合は str_ireplace
を使用します。
例えば、「hello」を「こんにちは」に置き換える際、大文字と小文字の違いを無視したい場合は以下のように書きます。
<?php
$text = "Hello, world! hello, PHP!";
$new_text = str_ireplace("hello", "こんにちは", $text);
echo $new_text;
?>
このコードを実行すると、以下のように出力されます。
こんにちは, world! こんにちは, PHP!
このように str_ireplace
を使えば、大文字と小文字の違いを気にせずに文字列を置換することができます。
9. 実践!文字列置換のサンプルコード(応用編)
最後に、str_replace
や preg_replace
を活用した実践的なサンプルコードを紹介します。
NGワードの伏せ字変換
Webサービスなどでは、不適切な単語を伏せ字にする処理が必要になることがあります。その場合、以下のようなコードを使うことができます。
<?php
$text = "これはとても悪い言葉です。";
$ng_words = ["悪い", "言葉"];
$replace_words = ["○○", "△△"];
$new_text = str_replace($ng_words, $replace_words, $text);
echo $new_text;
?>
このコードを実行すると、以下のように出力されます。
これはとても○○△△です。
メールアドレスのマスキング
ユーザーのプライバシーを保護するために、メールアドレスの一部を伏せ字にすることがあります。その場合、以下のように preg_replace
を使用できます。
<?php
$email = "example@gmail.com";
$masked_email = preg_replace("/(.{2}).+(@.+)/", "$1***$2", $email);
echo $masked_email;
?>
このコードを実行すると、以下のように出力されます。
ex***@gmail.com
このように、preg_replace
を活用すれば、特定の文字列をルールに基づいて置換することが可能です。