1. PHP

PHPのstr_replaceとpreg_replaceの違いと使い方を解説

Share

文字列の置換は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()

目的に合わせて使い分けることで、効率的に文字列操作ができます。

参考リンク