プロが教える店舗&オフィスのセキュリティ対策術

preg_replaceで画像タグに対して置き換え処理を行っています。
<img src=" ">を検索して置き換えしているのですが、
ifで条件分岐して、当てはまらないときだけ置き換えるように書く方法はありますか?

具体的には、「imgタグの中にclass="A"がある場合」以外のときに置き換え処理をしたいです。

質問者からの補足コメント

  • preg_replaceの検索時に否定先読み表現(?!.*A)を使い、Aを含まない場合にのみタグを置き換えをするよう書き換えました。
    不具合が出るかもしれませんが一旦解決ということで回答を締めます。
    ありがとうございました。

      補足日時:2023/05/02 11:50
  • ベストアンサーがまだ?選べないとなっているため、選べるようになるまで置いておきます。

      補足日時:2023/05/02 11:52

A 回答 (1件)

preg_replace_callback という似た関数を使うと、マッチした文字列をあらかじめ決まった別の文字に置換するのでなく、どう置換するかを関数で指定できます。

その関数内でifで判断して、元の文字列をreturnすれば置換されないし、異なる文字列をreturnすれば置換されます。
サンプル:
文字列中の整数を探して、100未満なら100を足した物に置換。
$result = preg_replace_callback(
"|\\d+|",
function($m){
if($m[0] < 100){
return $m[0]+100;
}else{
return $m[0];
}
},
"2 50 150 300"
);

$result は、"102 150 150 300"になる。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
pref_replace_callbackを調べてみたのですがさっぱり書き換え方がわからず直すことができませんでした。

これまで、
「'/<img(.*?)src="(.*?)"(.*?)>/'」
この文字列にマッチしたものすべてを、$2のURLに飛ぶaタグで囲むよう書き換えしていました。
この処理を「$1または$3にclass="A"を含まない場合のみ処理する」ように変えたいのですが、どのように書けばいいのでしょうか…

可能でしたらご教示願いたいです。

お礼日時:2023/05/01 17:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!