文字列の置換はPHPでよく使う処理の一つです。PHPには代表的な置換関数としてstr_replace()とpreg_replace()があります。
どちらも似ていますが、役割や使い方には明確な違いがあります。
この記事では両者の特徴と使い方を詳しく解説します。
目次
str_replace() とは?
str_replace()は、文字列を単純に置換するための関数です。パターンマッチングは行わず、指定した文字列を別の文字列に置き換えます。
$text = "Hello World!";
$result = str_replace("World", "PHP", $text);
echo $result; // Hello PHP!
- 第一引数: 検索する文字列
- 第二引数: 置換後の文字列
- 第三引数: 処理対象の文字列
- 第四引数(省略可能): 置換の回数を取得できる
配列を使った複数置換
複数の文字列を一度に置換することもできます。
$text = "I like cats and dogs.";
$result = str_replace(
["cats", "dogs"],
["lions", "wolves"],
$text
);
echo $result; // I like lions and wolves.
preg_replace() とは?
preg_replace()は、正規表現を使ったパターンマッチングによる置換ができる関数です。正規表現のパワフルな検索機能を活かして、より柔軟な置換処理が可能です。
$text = "My phone number is 090-1234-5678.";
$result = preg_replace('/\d{2,4}-\d{2,4}-\d{4}/', '***-****-****', $text);
echo $result; // My phone number is ***-****-****.
- 第一引数: 正規表現パターン
- 第二引数: 置換後の文字列
- 第三引数: 処理対象の文字列
記事の本筋ではありませんが、この正規表現の解説をしておきます。
この正規表現を部分ごとに分解すると以下のようになります。
\d{2,4}
「数字が2桁から4桁」の範囲にマッチします。
ここでは電話番号の最初のブロック(例:090や03)に対応しています。-
ハイフンそのものを表し、電話番号の区切り文字です。\d{2,4}
2番目の数字ブロックにも「2〜4桁の数字」が続く部分にマッチします。
例:1234や123など。-
再びハイフン。\d{4}
最後の数字ブロックは「4桁の数字」に限定されます。
例:5678
このように、「2〜4桁の数字」 + 「ハイフン」 + 「2〜4桁の数字」 + 「ハイフン」 + 「4桁の数字」という形式にマッチするため、一般的な日本の電話番号の形を広くカバーしています。
この正規表現で、文章内にある電話番号を安全に伏せ字に置き換えている例です。
複数の正規表現を同時に使う例
$text = "Today is 2023-05-15 and time is 14:30.";
$result = preg_replace(
['/(\d{4}-\d{2}-\d{2})/', '/(\d{2}:\d{2})/'],
['[DATE]', '[TIME]'],
$text
);
echo $result; // Today is [DATE] and time is [TIME].
str_replaceとpreg_replaceの違い
- パターンの扱い
str_replace()は単純な文字列置換のみpreg_replace()は正規表現による柔軟な置換が可能
- 用途
- 確定した文字列を置き換える場合は
str_replace()が簡単 - パターンにマッチする文字列を置換したい場合は
preg_replace()
- 確定した文字列を置き換える場合は
まとめ
- 固定文字列を置換 →
str_replace() - パターンで置換 →
preg_replace()
目的に合わせて使い分けることで、効率的に文字列操作ができます。