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

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

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

 

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

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

тема: Парсер линков
 
 автор: Morgan   (31.08.2009 в 01:42)   письмо автору
 
 

Вот пробелма, нужно заменить все href=" на href="http://site.ru/ , но при этом не трогать href="http://
Вот ,пытался зделать
   function prefix_replacer($string)
{
global $site;
if(substr($string[1],0,7) == 'http://')
 {return $string[0];}
 else{return 'href="http://'.$site['link'].'/'.$string[1];}
}
$file = preg_replace_callback('|href="(.*?)|iU','prefix_replacer',$file);

нужно сделать что бы заменяло href=",href=',src=",scr='
пробовал сделать типа
|href=\("\|\'\)(.*?)|iU
неполучаеться, подскажите
----
зы, регулярные выражения , не мое :D

  Ответить  
 
 автор: heed   (31.08.2009 в 10:00)   письмо автору
 
   для: Morgan   (31.08.2009 в 01:42)
 

придётся в строку замены вставлять так-же кавычку из совпадения (или совсем не трогать кавычки ) если они могут быть разными

$file=<<<TXT
href="/txt.txt"
href="javascript:history.back(1)"
HREF="http://txt.txt"
HREF=''
xsrc='php.php'
SRC='htm.htm'
TXT
;

echo $file = preg_replace(
    '#\b(?:href|src)=["\'](?=(?!http://)[^"\'])#i',
    '$0http://site.ru/',
    $file);

  Ответить  
 
 автор: ride   (31.08.2009 в 10:17)   письмо автору
 
   для: heed   (31.08.2009 в 10:00)
 

а (?= для чего?

  Ответить  
 
 автор: heed (OM)   (31.08.2009 в 10:50)
 
   для: ride   (31.08.2009 в 10:17)
 

просто подумал что неплохо было-бы хотябы не трогать пустые аттрибуты
(ато и так много чего лишнего попадает ,))
но можно и оставить только (?!http://)

  Ответить  
 
 автор: heed (OM)   (31.08.2009 в 10:56)
 
   для: ride   (31.08.2009 в 10:17)
 

Кстати да ,) с таким-же успехом будет работать и (?!http://|["\'])

  Ответить  
 
 автор: heed (..)   (31.08.2009 в 11:17)
 
   для: heed (OM)   (31.08.2009 в 10:56)
 

и забыл сказать что
(?!["\'])(?!http://)
тоже неплохой вариант

  Ответить  
 
 автор: ride   (31.08.2009 в 11:37)   письмо автору
 
   для: heed (..)   (31.08.2009 в 11:17)
 

(?!["\']) можно тоже убрать;)

  Ответить  
 
 автор: Morgan   (31.08.2009 в 15:37)   письмо автору
 
   для: heed   (31.08.2009 в 10:00)
 

спасиб, работает

  Ответить  
 
 автор: naxa   (01.09.2009 в 21:05)   письмо автору
 
   для: heed   (31.08.2009 в 10:00)
 

а что нужно указать, чтобы заменялись так же href=/txt.txt (без кавычек) или вот такое вот href = /txt.txt ?

update: для замены href = /txt.txt - разобрался :)
но а как указать, что после = нет кавычек ?

update2: с href=/txt.txt тоже разобрался - спасибо за внимание ))))))

  Ответить  
 
 автор: heed   (01.09.2009 в 21:19)   письмо автору
 
   для: naxa   (01.09.2009 в 21:05)
 

здесь вопрос обсуждался почти только в тех рамках , в которых он был задан :)
href = /txt.txt ? с такой постановкой вопроса преобразуется в http://site.ru//txt.txt
что как-бы не совсем правильная ссылка, хоть и работающая,

, для необязательности достаточно только добавить квантификатор "?" ("оператор" повторения ноль или один , есть или нет) ,всмысле [\'\"]?

  Ответить  
Rambler's Top100
вверх

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