PHP マニュアル
前のページ |  | 次のページ

# preg_replace

(PHP 3 >= 3.0.9, PHP 4, PHP 5)

preg_replace -- 正規表現検索および置換を行う

## 説明

mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit [, int &count]] )

`subject` に関して `pattern` を用いて検索を行い、 `replacement` に置換します。

## パラメータ

`pattern`

  検索を行うパターン。文字列もしくは配列とすることができます。

  `e` 修飾子を設定すると、preg_replace() は、参照先の対応する置換を行う際に `replacement` 引数を PHP コードであるとして取り扱います。 `replacement` には有効な PHP コードを記述してください。 さもないと、preg_replace() がある行でパースエラーが 発生してしまいます。

`replacement`

  置換を行う文字列もしくは文字列の配列。 この引数が文字列で、`pattern` 引数が配列の場合、 すべてのパターンがこの文字列に置換されます。 `pattern` および `replacement` のいずれもが配列の場合、各 `pattern` は 対応する `replacement` に置換されます。 もし、`replacement` 配列の要素の数が `pattern` 配列よりも少ない場合は、余った `pattern` は 空文字に置換されます。

  `replacement` では、 `\\`n`` 形式または ``$n`` 形式（PHP 4.0.4 以降）で参照を指定することができます。 後者の形式の方が好ましい形式です。各参照は、`n` 番目のキャプチャ用サブパターンにマッチしたテキストにより置換されます。 `n` は 0 から 99 までとすることができ、 `\\0` または `$0` は パターン全体にマッチするテキストを参照します。キャプチャ用サブパターンの番号 については、その左括弧が左から右に（1から）カウントされます。

  後方参照の直後に他の数字が続くような置換 (replacement) パターンを 使用する場合（すなわち、マッチしたパターンの直後に数字リテラルを置く 場合）、後方参照を行うために通常の `\\1` 表記を 使用することができません。例えば、`\\11`は、 後方参照 `\\1` の後にリテラル `1` が続くのか、後方参照 `\\11` で その後には何も続かないのかが不明のため、 preg_replace() を混乱させる可能性があります。 この場合、解決策は、`\${1}1` を使用することです。 こうすることで、`1` はリテラルとなり、後方参照 `$1` を明確に作成できます。

`subject`

  検索・置換対象となる文字列もしくは文字列の配列

  `subject` が配列の場合、検索と置換は `subject` の各要素に対して行われ、返り値も配列となります。

`limit`

  `subject` 文字列において、各パターンによる 置換を行う最大回数。デフォルトは `-1` (制限無し)。

`count`

  この引数が指定されると、置換回数が渡されます。

## 返り値

preg_replace() は、 `subject` 引数が配列の場合は配列を、 その他の場合は文字列を返します。

パターンがマッチした場合、〔置換が行われた〕新しい `subject` が返されます。マッチしなかった場合、`subject` が そのまま返されます。

## 変更履歴

バージョン | 説明
--- | ---
5.1.0 | `count` 引数が追加されました。
4.0.4 | `replacement` 引数に '$n' 形式が使用できるようになりました。
4.0.1 | `limit` 引数が追加されました。

## 例

例 1. 数字リテラルが後に続く後方参照

`<?php $string = 'April 15, 2003'; $pattern = '/(\w+) (\d+), (\d+)/i'; $replacement = '${1}1,$3'; echo preg_replace($pattern, $replacement, $string); ?>`

上の例の出力は以下となります。

    April1,2003

例 2. 添字配列の使用

`<?php $string = 'The quick brown fox jumped over the lazy dog.'; $patterns[0] = '/quick/'; $patterns[1] = '/brown/'; $patterns[2] = '/fox/'; $replacements[2] = 'bear'; $replacements[1] = 'black'; $replacements[0] = 'slow'; echo preg_replace($patterns, $replacements, $string); ?>`

上の例の出力は以下となります。

    The bear black slow jumped over the lazy dog.

pattern と replacement を ksort すると、所望のものが得られます。

`<?php ksort($patterns); ksort($replacements); echo preg_replace($patterns, $replacements, $string); ?>`

上の例の出力は以下となります。

    The slow black bear jumped over the lazy dog.

例 3. 複数値の置換

`<?php $patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/', '/^\s*{(\w+)}\s*=/'); $replace = array ('\3/\4/\1\2', '$\1 ='); echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27'); ?>`

上の例の出力は以下となります。

    $startDate = 5/27/1999

例 4. 'e' 修飾子の使用

`<?php preg_replace("/(<\/?)(\w+)([^>]*>)/e", "'\\1'.strtoupper('\\2').'\\3'", $html_body); ?>`

入力テキストのすべての HTML タグを大文字に変換します。

例 5. 空白の削除

この例は、文字列から余分な空白を取り除きます。

`<?php $str = 'foo o'; $str = preg_replace('/\s\s+/', ' ', $str); // This will be 'foo o' now echo $str; ?>`

例 6. `count` 引数の使用

`<?php $count = 0; echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $count); echo $count; //3 ?>`

上の例の出力は以下となります。

    xp***to
    3

## 注意

> 注意: `pattern` および `replacement` を使用する際、配列の並び順に処理されます。添字は整数であっても、 その並びは値の小さい順になっているとは限りません。 ですから、配列の添字を使って、どの `pattern` が、どの `replacement` に置換されるかを指定しようとする場合は、 preg_replace() をコールする前に、各配列に対し ksort() を実行しておくべきです。

## 参考

preg_match()
preg_replace_callback()
preg_split()

前のページ | ホーム | 次のページ
preg_replace_callback | 上に戻る | preg_split