HTMLの中に複数あるimgタグを抽出して、置換をした時の記録。
置換の流れ
preg_replace_callback関数を使うことで、$htmlの中から <img (.*)\/> を抽出し、無名関数の引数にセットしている。
無名関数では、スペース区切りで属性を配列化し、属性の置換処理を行っていくという流れ。
$html = preg_replace_callback('/<img (.*)\/>/u', function ($imgs) {
$attributes = explode(' ', $imgs[1]);
$modAttributes = [];
if (strpos($attribute, 'src=') !== false) {
// src属性の置換処理
} else if (strpos($attribute, 'class=') !== false) {
// class属性の置換処理
} else {
// それ以外の属性は、そのまま
$modAttributes[] = $attribute;
}
return '<img ' . implode(' ', $modAttributes) . ' />';
}, $html);
preg_replace_callback関数とは
preg_replace_callbackは、正規表現検索を行い、コールバック関数を使用して置換を行う関数。
返り値は、 subject が配列の場合には配列を、 それ以外の場合は文字列を返す。
エラー時の返り値は null となる。
マッチするものが見つかった場合は新しい subject を返し、それ以外の場合はもとの subject をそのまま返します。
callback関数は検索するパターンでマッチするたびに呼び出される。
preg_replace_callbackの他に、正規表現を使った検索や置換関数が色々ある。
実装時に、パパッとコーディングできるようになりたいところだ。。。
preg_match、preg_match_all、preg_replace、preg_grep
参考リンク
- PHP: preg_replace_callback – Manual
https://www.php.net/manual/ja/function.preg-replace-callback.php