Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Дописать в начало ссылки исключая начинающихся с http: ftp: и ...
 
 автор: yvpopov   (21.11.2006 в 14:12)   письмо автору
 
 

Подскажите как сделать.
Нужно дописать к началу ссылки $host_link(Например http://localhost), это я сделал, а как исключить ссылки которые начинаются с http:// или ftp://
т.е. например в данном случае

<a href="http://www.1.ru">1.ru</a>
<a href="www.2.ru">2.ru</a>
<a href="ftp://ftp.1.ru">ftp.1.ru</a>

должно получиться

<a href="http://www.1.ru">1.ru</a>
<a href="http://localhost/www.2.ru">2.ru</a>
<a href="ftp://ftp.1.ru">ftp.1.ru</a>

1 и 3 ссылка должна остаться неизменной, а к второй добавиться $host_link


    $fnd = array ( "/(background|href|src)=\"(.*?)(\")/i" );
    $replaceto = array ( "\\1=\"".$host_link."/\\2\"" );
    $screen=preg_replace($fnd,$replaceto,$screen);

   
 
 автор: cheops   (21.11.2006 в 15:39)   письмо автору
 
   для: yvpopov   (21.11.2006 в 14:12)
 

Здесь обычно прибегают к негативной опережающей проверке
    $fnd = array ( "/(background|href|src)=\"(?!http)(.*?)(\")/i" ); 
    $replaceto = array ( "\\1=\"".$host_link."/\\2\"" ); 
    $screen=preg_replace($fnd,$replaceto,$screen);

   
 
 автор: yvpopov   (21.11.2006 в 16:43)   письмо автору
 
   для: cheops   (21.11.2006 в 15:39)
 

Я вообще в регулярных выражения новичек, второй день ими занимаюсь...
и я пришел вот к такому решению Вы могли-бы пояснить...как будет правильнее и какие есть нюансы...

    $fnd = array ( "/(background|href|src)=\"([^(http:\/\/|ftp:\/\/)])(.*?)(\")/i" );
    $replaceto = array ( "\\1=\"".$host_link."/\\2\\3\"" );
    $screen=preg_replace($fnd,$replaceto,$screen);

   
 
 автор: cheops   (21.11.2006 в 20:19)   письмо автору
 
   для: yvpopov   (21.11.2006 в 16:43)
 

Если решение работает, его можно смело испльзовать.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования