|
|
|
| Подскажите как через preg_replace() заменить в ссылках все & на &
Нужно менять только в ссылках и не где более | |
|
|
|
|
автор: ..... (25.10.2010 в 13:19) |
|
|
для: Tamplier
(25.10.2010 в 12:58)
| | почему не str_replace() ? | |
|
|
|
|
|
|
|
для: .....
(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 не советую использовать (проблема с кавычками),
так-же как поиск & с проверкой что последующий текст непожож на ...>....</a>
или предидущий на <a.....href=. | |
|
|
|
|
|
|
|
для: .....
(25.10.2010 в 14:06)
| | А не проще-ли просто регулярку, чем заморачиватся с дополнительными функциями? | |
|
|
|
|
автор: ..... (25.10.2010 в 15:16) |
|
|
для: Tamplier
(25.10.2010 в 14:47)
| | такое выражение должно будет найти и вернуть только '&' , но проверив что строка точно не в значении аттрибута href ссылки.
подмаски (?<= ) или (?<! ) "заглядывающие назад" неудобны тем что не могут включать строк заранее неизвестного размера.
, остаются (?= ) и (?! ) "заглядывающие вперёд" , c определением того что дальше, в определённой или не определённой длинны, строке точно следует закрытие открывающего тега и закрывающий тег </a> , раньше чем открывающий тег <a>.
Если попытаться оптимизировать и ограничить проверку только например в последующих строках длинной 1024 символа. то выражение в тексте без тегов <а> будет пытаться анализировать по 1024 символа столько раз сколько в тексте '&';
с preg_replace_callback() всё пройдёт заметно быстрее , будут находитьсяч только '<' после чего , если нет 'a\b' продолжится быстрый поиск '<'.Да и
callback-функция будет предкомпилированной и быстрой.
preg_replace_callback() похоже на предкомпилированный вариант используемых в не-php языках циклов, типа while($txt =~ /<a\s......>/g) | |
|
|
|
|
|
|
|
для: .....
(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() из вариантов | |
|
|
|