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

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

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

 

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

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

тема: Замена $amp; в ссылке
 
 автор: Tamplier   (25.10.2010 в 12:58)   письмо автору
 
 

Подскажите как через preg_replace() заменить в ссылках все & на &
Нужно менять только в ссылках и не где более

  Ответить  
 
 автор: .....   (25.10.2010 в 13:19)
 
   для: Tamplier   (25.10.2010 в 12:58)
 

почему не str_replace() ?

  Ответить  
 
 автор: Tamplier   (25.10.2010 в 13:25)   письмо автору
 
   для: .....   (25.10.2010 в 13:19)
 

Нужно заменять исключительно в ссылках и не трогать другой код.
Так-бы я конечно использовал str_replace()

  Ответить  
 
 автор: .....   (25.10.2010 в 14:06)
 
   для: Tamplier   (25.10.2010 в 13:25)
 

в любом случае отличение текта ссылок от текста не-ссылок это не совсем попутная задача замене текста в одном из двух.
str_replасе() например неплохо можно вставить в preg_replace_callback()
// preg_replace_callback() ищет ссылки , а callback-функция применяет str_replасе() там где нужно.
просто preg_replace() c модификатором /e не советую использовать (проблема с кавычками),
так-же как поиск &amp; с проверкой что последующий текст непожож на ...>....</a>
или предидущий на <a.....href=.

  Ответить  
 
 автор: Tamplier   (25.10.2010 в 14:47)   письмо автору
 
   для: .....   (25.10.2010 в 14:06)
 

А не проще-ли просто регулярку, чем заморачиватся с дополнительными функциями?

  Ответить  
 
 автор: .....   (25.10.2010 в 15:16)
 
   для: Tamplier   (25.10.2010 в 14:47)
 

такое выражение должно будет найти и вернуть только '&amp;' , но проверив что строка точно не в значении аттрибута href ссылки.

подмаски (?<= ) или (?<! ) "заглядывающие назад" неудобны тем что не могут включать строк заранее неизвестного размера.
, остаются (?= ) и (?! ) "заглядывающие вперёд" , c определением того что дальше, в определённой или не определённой длинны, строке точно следует закрытие открывающего тега и закрывающий тег </a> , раньше чем открывающий тег <a>.
Если попытаться оптимизировать и ограничить проверку только например в последующих строках длинной 1024 символа. то выражение в тексте без тегов <а> будет пытаться анализировать по 1024 символа столько раз сколько в тексте '&amp';

с preg_replace_callback() всё пройдёт заметно быстрее , будут находитьсяч только '<' после чего , если нет 'a\b' продолжится быстрый поиск '<'.Да и
callback-функция будет предкомпилированной и быстрой.

preg_replace_callback() похоже на предкомпилированный вариант используемых в не-php языках циклов, типа while($txt =~ /<a\s......>/g)

  Ответить  
 
 автор: Tamplier   (25.10.2010 в 15:22)   письмо автору
 
   для: .....   (25.10.2010 в 15:16)
 

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

  Ответить  
 
 автор: .....   (25.10.2010 в 16:04)
 
   для: Tamplier   (25.10.2010 в 15:22)
 

разобраться можно только эксперементируя составляя выражения.

в php не так много возможностей c regexp, всё буквально уместилось например здесь
http://softtime.ru/group/id_group=3

я просто пытался объяснить что я-бы для такого использовал всё-таки preg_replace_callback() из вариантов

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

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