phpでimgタグのsrc属性とclass属性を全置換する

phpでimgタグのsrc属性とclass属性を全置換する

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

参考リンク

Web技術カテゴリの最新記事