Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. preg_replace() / preg_split()

preg_replace() / preg_split()対応: PHP 4(2000)

正規表現を使って文字列の置換や分割を行います。パターンに一致した部分を別の文字列に置き換えたり、パターンを区切り文字として文字列を分割できます。

構文
// パターンにマッチした部分を置換します。
preg_replace($pattern, $replacement, $subject, $limit);

// コールバック関数を使ってマッチした部分を置換します。
preg_replace_callback($pattern, $callback, $subject, $limit);

// パターンを区切り文字として文字列を分割します。
preg_split($pattern, $subject, $limit, $flags);

// 配列の要素を正規表現でフィルタリングします。
preg_grep($pattern, $array, $flags);
関数一覧
関数概要
preg_replace($pattern, $replacement, $subject)正規表現にマッチした部分を置換文字列で置き換えます。置換文字列内で『$1』や『${1}』を使うとキャプチャグループを参照できます。
preg_replace_callback($pattern, $callback, $subject)マッチするたびにコールバック関数が呼ばれ、その戻り値で置換されます。動的な置換処理に使用します。
preg_split($pattern, $subject, $limit)正規表現パターンを区切りとして文字列を分割し、配列として返します。『explode()』より柔軟な分割が可能です。
preg_grep($pattern, $array)配列の要素を正規表現でフィルタリングし、マッチした要素だけの配列を返します。
戻り値

『preg_replace()』と『preg_replace_callback()』は置換後の文字列を返します。『$subject』が配列の場合は配列を返します。『preg_split()』は分割された文字列の配列を返します。『preg_grep()』はマッチした要素の配列を返します。エラー時はいずれも『null』を返します。

サンプルコード
<?php
// 基本的な置換
echo preg_replace("/PHP/", "PHP8", "PHPは人気です。"); // 『PHP8は人気です。』と出力されます。

// 大文字小文字を無視して置換します。
echo preg_replace("/hello/i", "こんにちは", "Hello World"); // 『こんにちは World』と出力されます。

// キャプチャグループを使った置換
$date = "2025/04/15";
echo preg_replace("/(\d{4})\/(\d{2})\/(\d{2})/", "$1-$2-$3", $date); // 『2025-04-15』と出力されます。

// 日付フォーマットを変換する実用例
$date = "2025-04-15";
echo preg_replace("/(\d{4})-(\d{2})-(\d{2})/", "$1年$2月$3日", $date); // 『2025年04月15日』と出力されます。

// HTMLタグを除去します。
$html = "<p>テキスト</p><br><strong>太字</strong>";
echo preg_replace("/<[^>]+>/", "", $html); // 『テキスト太字』と出力されます。

// 連続する空白を1つにまとめます。
$text = "こんにちは    世界    です";
echo preg_replace("/\s+/", " ", $text); // 『こんにちは 世界 です』と出力されます。

// preg_replace_callback() で動的な置換を行います。
$text = "商品A: 1500円、商品B: 2300円";
$result = preg_replace_callback("/(\d+)円/", function($matches) {
    return number_format($matches[1]) . "円(税込" . number_format($matches[1] * 1.1) . "円)";
}, $text);
echo $result; // 『商品A: 1,500円(税込1,650円)、商品B: 2,300円(税込2,530円)』と出力されます。

// preg_replace_callback() でテンプレートの変数を展開する実用例
$template = "こんにちは、{{name}}さん。{{date}}の予約を承りました。";
$vars = ["name" => "田中", "date" => "4月15日"];
$result = preg_replace_callback("/\{\{(\w+)\}\}/", function($matches) use ($vars) {
    return $vars[$matches[1]] ?? $matches[0]; // 未定義の変数はそのまま残します。
}, $template);
echo $result; // 『こんにちは、田中さん。4月15日の予約を承りました。』と出力されます。

// preg_split() で柔軟に分割します。
$csv = "りんご, みかん,  バナナ ,ぶどう";
$fruits = preg_split("/\s*,\s*/", $csv);
print_r($fruits); // 空白を含むカンマで分割され4要素の配列になります。

// 複数の区切り文字で分割します。
$text = "PHP;JavaScript,Python|Ruby";
$languages = preg_split("/[;,|]/", $text);
print_r($languages); // 4つの言語名の配列になります。

// preg_grep() で配列をフィルタリングします。
$files = ["index.php", "style.css", "app.js", "config.php", "readme.md"];
$php_files = preg_grep("/\.php$/", $files);
print_r($php_files); // 『["index.php", "config.php"]』が出力されます。

// PREG_GREP_INVERT で除外フィルタとして使います。
$non_php = preg_grep("/\.php$/", $files, PREG_GREP_INVERT);
print_r($non_php); // PHP以外のファイルが出力されます。
概要

『preg_replace()』は正規表現ベースの置換関数です。置換文字列に『$1』『$2』を使うとキャプチャグループの内容を参照でき、日付フォーマットの変換などで活躍します。固定文字列の置換であれば『str_replace()』の方が高速です。

『preg_replace_callback()』はマッチした内容に基づいて動的に置換文字列を生成する場面で使います。コールバック関数の引数には『preg_match()』の『$matches』と同じ形式の配列が渡され、『$matches[0]』がマッチ全体、『$matches[1]』以降がキャプチャグループになります。

『preg_split()』は区切り文字が複数種類あったり、前後の空白を同時に除去したい場合に『explode()』より柔軟です。『preg_grep()』は配列のフィルタリングに特化しており、『PREG_GREP_INVERT』フラグで除外フィルタとしても使えます。パターンマッチングには『preg_match() / preg_match_all()』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。