PHPの preg_replace() e修飾子で置換しつつ計算する。PHP 7用に preg_replace_callback() に置き換え。
<img src="./test.jpg" width="640" height="480" alt="test">を
<img src="./test.jpg" width="320" height="240" alt="test">に置換するために以下のようなコードを記述。
$body = preg_replace('/<img (.+) width=\"(\d{1,4})\" height=\"(\d{1,4})\"/e', '"<img $1 width=\"" . round("$2"/2) . "\" height=\"" . round("$3"/2) . "\""', $body);要するに画像のサイズが半分になるように置換する。
$body = preg_replace_callback('/<img (.+) width=\"(\d{1,4})\" height=\"(\d{1,4})\"/', function($m){ return "<img $m[1] width=\"" . round($m[2]/2) . "\" height=\"" . round($m[3]/2) . "\""; }, $body);ただし、無名関数はPHP 5.3から使用でき、PHP 5.2以下だとエラーになる。
function img_replace($m){ return "<img $m[1] width=\"" . round($m[2]/2) . "\" height=\"" . round($m[3]/2) . "\""; } $body = preg_replace_callback('/<img (.+) width=\"(\d{1,4})\" height=\"(\d{1,4})\"/', 'img_replace', $body);http://php.net/manual/ja/reference.pcre.pattern.modifiers.php