preg_replaceとは? わかりやすく解説

Weblio 辞書 > コンピュータ > PHP関数リファレンス > preg_replaceの意味・解説 

preg_replace

(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 引数が追加されました。

例 1621. 数字リテラルが後に続く後方参照
<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
?>
上の例の出力は以下となります。

April1,2003

    


例 1622. 添字配列の使用
<?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.

    


例 1623. 複数値の置換
<?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

    


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


例 1625. 空白の削除
この例は、文字列から余分な空白を取り除きます。
<?php
$str = 'foo  o';
$str = preg_replace('/\s\s+/', ' ', $str);
// This will be 'foo o' now
echo $str;
?>


例 1626. 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()




英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「preg_replace」の関連用語

preg_replaceのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



preg_replaceのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
PHP Documentation GroupPHP Documentation Group
Copyright © 1997 - 2024 by the PHP Documentation Group.

©2024 GRAS Group, Inc.RSS