Мне нужно сопоставить относительные URL-адреса в моем коде и заменить его абсолютными URL-адресами. В этих относительных URL - адресов есть ~
символ, который я не могу показаться, чтобы соответствовать.
$page = preg_replace('/src="(\/)?([\w_\-\/\.\?&=@%#]*)"/i','src="' . $url . '$2"', $page);
$page = preg_replace('/href="(\/)?([\w_\-\/\.\?&=@%#]*)"/i','href="' . $url . '$2"', $page);
Это должно заменить мои URL-адреса, но это не работает с этими URL-адресами:
Как так?
/~/
еще не работает. Он должен заменить/~/
только на домен, без подпапки.
Это, вероятно, проще всего, если мы сделаем это на дополнительном этапе замены.
$domain = 'www.domain.dk';
$page = preg_replace("#($domain/)~/#", '$1', $page);
Я бы использовал это регулярное выражение:
(?:src="|href=")(?!http)\/?(.+?)"
Это позволит вам поймать все URL-адреса в атрибутах src
или href
, которые не запускаются по http
(и это позаботится о наличии или нет ведущей косой черты):
$page = preg_replace('/(?:src="|href=")(?!http)\/?(.+)"/i', $url . '$1', $page);
Warning: preg_replace(): Unknown modifier '('
... Возможно, что-то отформатировано?/
! [сообщение отредактировано]