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() も参照下さい。