| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > Самая сложная регулярка в мире |
| Автор: gendelman 25.9.2008, 12:04 | ||||||
| Задумал я в html-документе в теге <img...> все пути к изображению на абсолютные заменить а заодно и атрибуты тега на свой манер исправить. И все, естественно, ЗА ОДИН ПРОХОД. Заранее не известно, какого вида пути к картинкам в конкретном документе, но понятно, варианта есть три:
Сначала всё казалось простым - брать из тега картинку, (не зависимо - полный у неё путь или нет) и заменять на уже с подставленным полным путем. Но так не годиться - вдруг это изображение с внешнего рессурса? Т.е полные пути трогать не надо. Можно, чтобы регулярка обходила теги с полным путем, но тогда не заменятся атрибуты тега. Для компенсации недостающих путей заранее заготовил:
Вот предмет мучений:
Получилось, что если путь к картике полный то он вместе с названием изображения помещается в $1 функции, а $2 и $3 остаются пустыми, если относительный, то в $2, пустые $1 и $3, ну а если пути вообще нет, то в $3, $1 и $2 - пусто. Полученный результат я собирался как-то использовать в параметре replacement, т.е. в зависимости от наличия/отсутствия содержимого в $1 $2 $3 подставлять туда $full или $short или ничего не подставлять но... Начинает казаться, что $1 $2 $3 - это исключительно внутренние переменные функции preg_replace или я чего-то не понимаю? Или я вообще не в правильном направлении двигаюсь? В два-то приёма я сделал, но душа просит в один. Подскажите решение. |
| Автор: teroni 25.9.2008, 12:25 |
| Посмотрите в сторону модификатора /e в шаблоне и проверки на пустоту в замещаемом выражении. |
| Автор: Wolf1994 25.9.2008, 12:35 |
| Для сложных условий лучше всего подходит: http://ru2.php.net/manual/ru/function.preg-replace-callback.php. |