PHP Regex Заменить атрибут SRC изображения - PullRequest
1 голос
/ 27 марта 2012

Я пытаюсь найти регулярное выражение, которое позволило бы мне заменить атрибут 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=" удаляется, когда на экран выводится $ content.В конце концов, SRC обновляется должным образом, и все атрибуты после обновленного URL изображения возвращаются на экран.

Меня не интересует использование библиотеки синтаксического анализа DOM или XML, так как этонебольшое приложение.

Как я могу исправить регулярное выражение, чтобы обновлялось только значение для SRC?

Спасибо, что уделили время!

Ответы [ 2 ]

2 голосов
/ 27 марта 2012

Используйте ленивую звезду вместо жадной.

Это может быть вашей проблемой:

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

Измените ее на:

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

Таким образом, [^>]* соответствует наименьшему возможному числу вашего выражения в скобках, а не наибольшему возможному.

1 голос
/ 27 марта 2012

Сделать другую группировку и добавить ее к возвращаемому значению?

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);
...