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

# preg_replace

(PHP 3>= 3.0.9, PHP 4 )

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

## 説明

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

`subject`に関して `pattern`を用いて検索を行い、 `replacement`に置換します。 `limit`を指定した場合、 `limit` 回のマッチまで置換が行なわれます。`limit`が 省略されるか -1 の場合、マッチするものは全て置換されます。

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

マッチした場合、新しい`subject`が返されます。 マッチしなかった場合には、`subject` は、無変 更で返されます。

preg_replace()に渡す全てのパラメータは配列とする ことができます。

`subject`が配列の場合、検索及び置換は `subject`の各エントリ毎に行われ、 返り値も配列として返されます。

`pattern`および`replacement` が配列の場合、 preg_replace()は各配列からの値を用いて `subject`に関する検索および置換を行います。 `replacement`の値が `pattern`よりも少ない場合、残りの置換用文字列 に関して空の文字列が使用されます。 パターン`pattern`が配列で `replacement`が文字列の場合、この置換文字列 は `pattern`の各値毎に使用されます。 しかし、逆の場合は意味がありません。

`/e`修飾子は、 preg_replace()が `replacement`パラメータを適当な置換を 行った後、PHP コードとして処理するようにします。 ヒント: `replacement` が有効なPHPコード文字列から 構成されるようにしてください。そうでない場合、 preg_replace() のある行でPHP は構文エラーを発 生します。

例 1複数の値を置換する
    $patterns = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/",
                        "/^\s*{(\w+)}\s*=/");
    $replace = array ("\\3/\\4/\\1\\2", "$\\1 =");
    print preg_replace ($patterns, $replace, "{startDate} = 1999-5-27");

この例の出力は次のようになります。

    $startDate = 5/27/1999

例 2/e 修飾子の使用法
    preg_replace ("/(<\/?)(\w+)([^>]*>)/e",
                  "'\\1'.strtoupper('\\2').'\\3'",
                  $html_body);
入力テキストの全てのHTMLタグを大文字に変換します。

例 3HTMLをテキストに変換する
    // $document には、HTMLドキュメントが含まれている必要があります。
    // このドキュメントのHTMLタグおよびjavascriptの部分と空白文字を
    // 削除します。また、いくつかのHTMLエンティティを等価なテキストに
    // 変換します。

    $search = array ("'<script[^>]*?>.*?</script>'si",
                                                    // javascriptを削除
                     "'<[\/\!]*?[^<>]*?>'si",  // htmlタグを削除
                     "'([\r\n])[\s]+'",  // 空白文字を削除
                     "'&(quot|#34);'i",  // htmlエンティティを置換
                     "'&(amp|#38);'i",
                     "'&(lt|#60);'i",
                     "'&(gt|#62);'i",
                     "'&(nbsp|#160);'i",
                     "'&(iexcl|#161);'i",
                     "'&(cent|#162);'i",
                     "'&(pound|#163);'i",
                     "'&(copy|#169);'i",
                     "'&#(\d+);'e");  // phpとして評価

    $replace = array ("",
                      "",
                      "\\1",
                      "\"",
                      "&",
                      "<",
                      ">",
                      " ",
                      chr(161),
                      chr(162),
                      chr(163),
                      chr(169),
                      "chr(\\1)");

    $text = preg_replace ($search, $replace, $document);

> 注意 パラメータ`limit`はPHP 4.0.1pl2で追加されま した。

preg_match(), preg_match_all(), preg_split()も参照下さい。

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