Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Самая сложная регулярка в мире, такой и нет, наверное... 
:(
    Опции темы
gendelman
Дата 25.9.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 7.4.2008

Репутация: нет
Всего: нет



Задумал я в html-документе в теге <img...> все пути к изображению на абсолютные заменить а заодно и атрибуты тега на свой манер исправить. И все, естественно, ЗА ОДИН ПРОХОД. 

Заранее не известно, какого вида пути к картинкам в конкретном документе, но понятно, варианта есть три:
Код

<img src="http://site.com/photo/album/pics.jpg">
<img src="/photo/album/pics.jpg">
<img src="pics.jpg">

Сначала всё казалось простым - брать из тега картинку, (не зависимо - полный у неё путь или нет)
и заменять на уже с подставленным полным путем. Но так не годиться - вдруг это изображение с внешнего рессурса? Т.е полные пути трогать не надо. Можно, чтобы регулярка обходила теги с полным путем, но тогда не заменятся атрибуты тега.
Для компенсации недостающих путей заранее заготовил:
Код

$full  = 'http://site.com/photo/album/';
$short = 'http://site.com';

Вот предмет мучений:
Код

preg_replace ('#<img src=("http://[^"]*?")?("/[^"]*?")?("[^"]*?")?[^>]*?>#si', 'replacement', $html);
// Слеши для простоты не экранирую

Получилось, что если путь к картике полный то он вместе с названием изображения помещается в $1 функции, а $2 и $3 остаются пустыми, если относительный, то в $2, пустые $1 и $3, ну а если пути вообще нет, то в $3, $1 и $2 - пусто. 

Полученный результат я собирался как-то использовать в параметре replacement, т.е. в зависимости от наличия/отсутствия содержимого в $1 $2 $3 подставлять туда $full или $short или ничего не подставлять но... 
Начинает казаться, что $1 $2 $3 - это исключительно внутренние переменные функции preg_replace или я чего-то не понимаю? Или я вообще не в правильном направлении двигаюсь?

В два-то приёма я сделал, но душа просит в один.  smile  smile  smile 
Подскажите решение.
PM MAIL   Вверх
teroni
Дата 25.9.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 15.5.2007
Где: Днепропетровск

Репутация: 8
Всего: 22



Посмотрите в сторону модификатора /e в шаблоне и проверки на пустоту в замещаемом выражении.
PM MAIL   Вверх
Wolf1994
Дата 25.9.2008, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 1
Всего: 29



Для сложных условий лучше всего подходит: preg_replace_callback.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0661 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.