1

SRC画像の属性を置き換えることができる正規表現を見つけようとしています。ここに私が持っているものがあります:

function getURL($matches) {
  global $rootURL;
  return $rootURL . "?type=image&URL=" . base64_encode($matches['1']);
}

$contents = preg_replace_callback("/<img[^>]*src *= *[\"']?([^\"']*)/i", getURL, $contents);

ほとんどの場合、これはうまく機能しsrc="ますが、$contents が画面にエコーされるときに属性の前にあるものはすべて削除されます。最終的にSRCは適切に更新され、更新された画像 URL の後のすべての属性が画面に返されます。

これは非常に小さなアプリケーションなので、DOM または XML 解析ライブラリの使用には関心がありません。

SRCの値のみが更新されるように正規表現を修正するにはどうすればよいですか?

お時間をいただきありがとうございます!

4

2 に答える 2

2

貪欲なスターの代わりに怠惰なスターを使用してください。

これはあなたの問題かもしれません:

/<img[^>]*src *= *[\"']?([^\"']*)/
         ^

次のように変更します。

/<img[^>]*?src *= *[\"']?([^\"']*)/

このように、 は[^>]*ブラケット式の可能な最大数ではなく、可能な限り最小の数に一致します。

于 2012-03-27T04:59:30.367 に答える
1

別のグループ化を行い、それを戻り値の前に追加しますか?

function getURL($matches) {
  global $rootURL;
  return $matches[1] . $rootURL . "?type=image&URL=" . base64_encode($matches['2']);
}

$contents = preg_replace_callback("/(<img[^>]*src *= *[\"']?)([^\"']*)/i", getURL, $contents);
于 2012-03-27T04:57:06.860 に答える