Заменить в тексте все относительные ссылки

Gorets

Новичок
Заменить в тексте все относительные ссылки

нужно в тексте заменить все относительные ссылки на абсолютные
т.е. <a href="index.php?id=2">qqq</a> заменить к примеру на <a href="http://www.site.ru/index.php?id=2>qqq</a>
делаю так
PHP:
$html2=preg_replace('/<a href=[\"]??(?!http:\/\/)(.+?)/i','<a href="'.$addurl.'$2',$html);
все чудесно, но не хочет отсеивать полные ссылки... в чем проблема?
по идее это должно отсекать полные ссылки
PHP:
(?!http:\/\/)
 

sage

Новичок
а что за [\"] и ??

-~{}~ 12.02.07 17:54:

измени ограничивающие символы на какие-нить другие, дабы не городить леса из палок в http://
 

Gorets

Новичок
измени ограничивающие символы на какие-нить другие, дабы не городить леса из палок в http://
нашел на форуме вот такой вариант, но он тоже не отсеивает полные ссылки
$s2=preg_replace('~<a([^>]+)href=["]?(?!http://)(.+?)"~','<a$1href="'.$add.'$2"',$s);
 

Gorets

Новичок
проще всего так ответить....

вот такой вариант вроде бы работает
$s3=preg_replace('~<a +href="(?!http://)([^\>]+)~i','<a href="'.$add.'$1',$s);

а когда пытаюсь поставить необязательной двойную кавычку, то перестает исключать полные ссылки

$s3=preg_replace('~<a +href="?(?!http://)([^\>]+)~i','<a href="'.$add.'$1',$s);

может хоть подскажите, почему так происходит?
 

hermit_refined

Отшельник
проще всего так ответить....
ошибаетесь. проще дать вам готовый код, чтобы вы с ним убежали ;-)
может хоть подскажите, почему так происходит?
хороший вопрос.
допустим у нас есть строка "http://example.com/ и выражение "?(?!http://).

грубо говоря, первый символ (двойная кавычка) совпадает, потому проверяем на соответствие http://example.com/ и (?!http://).
обламываемся.
возвращаемся назад, умеряем жадность ?, и сверяем "http://example.com/ и (?!http://).
соответствует? вполне.
 

Gorets

Новичок
ну и как быть в этом случае? как при (?!http://) однозначно отсеять полные ссылки?
 
Сверху