PHP関数 preg_replace

TOP > PHP  > PHP関数リファレンス  > preg_replace

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

文字列置換 

●書式
mixed preg_replace ( mixed ①$pattern , mixed ②$replace , mixed ③$src
  [, int ④$limit = -1 [, int ⑤&$count ]] )

●意味
③$src に対して 正規表現 ①$pattern を用いて検索を行い、②$replace に置換した結果を返す。

パラメーター


① mixed $pattern
 検索を行うパターン。文字列や配列で。

② mixed $replace
 置換を行う文字列もしくは文字列の配列。

③ mixed $src
 検索・置換対象となる文字列・文字列の配列
 $src が配列の場合、検索・置換は $src の各要素に行われ、返り値も配列となる。

④ int $limit
 置換を行う最大回数。
 デフォルトは -1 (制限無し)。

⑤ int $count
 置換回数。

返り値
 *引数 文字列または、配列($src が配列の場合)。
 パターンがマッチした場合 :置換結果。
 マッチしなかった場合 : ③引数の $src 。
 エラーが発生した場合 : NULL。


マッチした文字列を参照する


$ret = preg_replace('/(d+) (d+) (d+)/i', '${2}', '123 456 789') ;
print "$ret" ;
456

プログラムの意味
'123 456 789' という文字列から '456' の部分を抜き出すために、
'/(d+) (d+) (d+)/i' で正規表現でマッチングさせた場合、
${1} が '123'、${2} が'456'、${3} が'789' となるため
$replace の部分には ${2} と指定します。

参考プログラム
$ret = preg_replace('/(d+) (d+) (d+)/i', '抜き出した数値は ${2} です。', '123 456 789') ;
print "$ret" ;
抜き出した数値は 456 です。


\1と$1と${1}


$ret = preg_replace('/(d+) (d+) (d+)/i', '\2', '123 456 789') ;
$ret = preg_replace('/(d+) (d+) (d+)/i', '$2', '123 456 789') ;
$ret = preg_replace('/(d+) (d+) (d+)/i', '${2}', '123 456 789') ;

いずれの $ret もすべて
456

${1}形式はPHP4.0.4移行で用いる事ができ、推奨されています。
$1形式の場合、$11が 「$1」なのか「$1と1」なのか混乱をきたす問題点があります。
\1形式は、結果は同様ですが、PHP 4.0.4 以降では推奨されていません。

サンプルコード


$value = 'May 11, 2011';

$ret = preg_replace('/(w+) (d+), (d+)/i', '${1}', $value) ;
print "$ret" ;
May

$ret = preg_replace('/(w+) (d+), (d+)/i', '${2}', $value) ;
print "$ret" ;
11

$ret = preg_replace('/(w+) (d+), (d+)/i', '${3}', $value) ;
print "$ret" ;
2011

$ret = preg_replace('/(w+) (d+), (d+)/i', '${3}-${1}-${2}', $value) ;
print "$ret" ;
2011-May-11

配列の置換


$p[0] = '/abc/';
$p[1] = '/def/';
$p[2] = '/ghi/';
$r[0] = '123';
$r[1] = '456';
$r[2] = '789';

$value = 'abc def ghi jkl';
$ret = preg_replace($p, $r, $value) ;
print_r ($ret) ;
123 456 789 jkl







索引

A  B  C  D  E  F  G  H  I  J  K  L  M  N 
O  P  Q  R  S  T  U  V  W  X  Y  X