Я очень старался найти решение, но не смог.Да, регулярное выражение слишком сложно.В любом случае, здесь есть проблема.
Цель: Я хочу заменить ссылку на изображение ссылками на изображение cdn в PHP.Чтобы сделать это, я подумал, что лучше использовать preg_replace.
, если links is /var/b.png ИЛИ http://www.example.com/png, он будет заменен на CDN, но если case src или class содержит captcha«тогда это не должно быть, поскольку они являются динамическими по своей природе.
Для начала я пытаюсь:
$_SERVER["HTTP_HOST"] = 'www.bring.com';
$preg_host = preg_quote($_SERVER["HTTP_HOST"], '/');
$content = preg_replace('/((\<image\s+.*?src\=)(["\']http\:\/\/'.$preg_host.')(\/.*?["\'](^(?=.*(captcha)))(.*)?\>))/i', '$2$3.nyud.net:8080$4', $content);
$content = preg_replace('/(\<image\s+.*?src\=["\'])(\/.*?["\'].*?\>)/i', '$1http://'.$_SERVER['HTTP_HOST'].'.nyud.net:8080$2', $content);
Условие таково: Когда этого не делать: src может содержать слово «captcha», а в некоторых случаях класс содержит «captcha», и этот класс может быть впереди или src или позади src, что делает его более сложным.В этих случаях я не хочу заменять ссылки, например:
$content = <<<END
<image
type="image" src="/skins/bph/customer/images/icons/go.gif" alt="Search" title="Search" class="go-button" />
<image
id="verification_image_login_login_popup_form" src="http://www.bring.com/index.php?dispatch=image.captcha&verification_id=%3Alogin_login_popup_form&login_login_popup_form4ef33269bf30b=" alt="" onclick="this.src += 'reload' ;" width="100" height="25" class="image-captcha valign" /></p><div
class="clear">
<image
id="verification_image_login_login_popup_form" class="valign" src="http://www.bring.com/skins/bph/customer/images/icons/go.gif" alt="" onclick="this.src += 'reload' ;" width="100" height="25" /></p><div
class="clear">
END;
В результате:
Не следует заменять, но происходит наоборот: (
Следующее должно получить замену, так как в нем нет класса с капчей или ссылки со словом капчи
<image
id="verification_image_login_login_popup_form" class="valign" src="http://www.bring.com/skins/bph/customer/images/icons/xxx" alt="" onclick="this.src += 'reload' ;" width="100" height="25" /></p>