PHP入門 正規表現関数 正規表現で文字列を置換する(preg_replace関数)
正規表現による置換処理を行うには、preg_replace関数を使います。
構文:preg_replace関数
preg_replace(string|array $pattern, string|array $replacement,
string|array $subject[, int $limit = -1 [, int&$count]]):string|array|null
$pattern | 正規表現パターン |
$replacement | 置き換え後の文字列 |
$subject | 置き換え対象の文字列 |
$limit | 置換の上限回数(既定では無制限) |
&$count | 実際に置換が行われた回数を受け取る変数 |
引数$patern、$replacement、$subjectには文字列の他、配列を指定できます。引数の型に応じて、preg_replace関数は結果も文字列、または配列として返します(nullはエラーが発生した場合の戻り値です)。正規表現による置き換えでは、置き換え後の文字列(引数replacement)に置き換え前にマッチした文字列を含めることができます。$0はマッチした文字列全体、$1、$2、・・・はそれぞれサブマッチ文字列を表しています。
$12などの表現は12番目のサブマッチ文字列を示しているのか、「$1」+「2」を表しているのかが識別できません。この場合、「${1}2」のように記述して、リテラルと本来の「$1」を明確に識別できようにする必要があります。
例:文字列に含まれるURL文字列を抽出し、これを対応するアンカータグで置き換える
<?php
$msg = <<<EOD
洋風亭のとんかつは予約は、次のHP(http://wwww.tonton.co.jp/)からご予約することができます。なお、仕出し弁当の
ご予約は、次のHP(http://wwww31.shidasi.jp/)からご予約お願い申し上げます。
EOD;
print preg_replace('|http(s)?://([\w-]+\.)+[\w]+(/[\w ./?%&=-]*)?|','<a href="$0">$0</a>',$msg);