![]() |
|
Модераторы: bsa |
![]()
|
|
| emaxiz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 1.9.2008 Репутация: нет Всего: нет |
помогите, пожалуйста, написать программу которая бы осуществляла преобразование HTML документов; чтобы все абсолютные ссылки на документы и файлы изображений заменялись на относительные.
т.е. к примеру нам дан какой-нибудь html документ и нужно чтобы эта программа заменяла абсолютные ссылки на относительные и сохраняла его в другом файле. Например в этом html документе встретилось <a href="http://forum.vingrad.ru/images/avatars/1.gif">рис</a> и нужно чтоб она заменила на <a href="images/avatars/1.gif">рис</a> можно ли осуществлять эту замену (удаление этого корня сайта) с помощью strstr? |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 2 Всего: 10 |
А может проще скрипт на перле написать? там всего одна строчка выйдет...
А вообще можно сделать с помощью регулярных выражений, к примеру boost::regexp Сейчас нет возможности код кинуть, сори. Добавлено через 2 минуты и 43 секунды Извините, по последнюю строчку не заметил. В принципе можно, но strstr - это всего лишь поиск подстроки, вам придется написать собственную ф-цию. И еще вопро, строка (корень сайта) фиксирована? или неизвестна? |
|||
|
||||
| emaxiz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 1.9.2008 Репутация: нет Всего: нет |
корень сайта может быть любой. т.е. может быть любой сайт. мне нужно на с++
а какую функцию писать то? |
|||
|
||||
| lc0d3r |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 22.7.2008 Где: Киев Репутация: нет Всего: нет |
можно сделать замену регулярками, я когда-то юзал ругулярки в либе pcre.. она сама не сильно тяжелая +хватает документации и примеров /*кстати синтаксиси да и сама либа перловая*/
|
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 2 Всего: 10 |
Тоже вариант. Перловые регекспы самые мощные на мой взгляд
|
|||
|
||||
| emaxiz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 1.9.2008 Репутация: нет Всего: нет |
так надо все это не на Perl а на С++
|
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 2 Всего: 10 |
Сказали же, библиотека pcre именно на С++, синтаксис регекспов перловый. Можете попробовать так же boost::regexp, хотя я лично не пользовался.
|
|||
|
||||
| MastEdm |
|
|||
![]() Master ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 3.12.2005 Где: Москва, МГИУ Репутация: 1 Всего: 2 |
А зачем тут вообще регулярки? На мой взгляд, если решать поставленную задачу на плюсе, то проще и быстрее парсить все ручками. Пускаем посимвольный цикл по всему буферу с html кодом и вперед.
Как вариант можно через strstr искать указатель на начало ссылки примерно так:
Ну а новый код складывать в новый буфер. Это сообщение отредактировал(а) MastEdm - 3.9.2008, 21:39 |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
MastEdm потому-что ваша штука не найдет такое, например:
Хотя, конечно, парсить руками можно. и даже не очень сложно.. Это сообщение отредактировал(а) jonie - 3.9.2008, 22:47 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| emaxiz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 1.9.2008 Репутация: нет Всего: нет |
а можно ли сделать чтоб все что до / (слеша) удалялось и 3 раза повторять цикл. т.е. чтобы все удалялось до 3 слеша. и получится что программа уберет этот корень сайта
|
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
std::string. find_first_of до третьей "/"
Я бы писал свой класс строки. Ну, всмысле он у меня конечно есть, но я бы добавил в неё такую функцию. Велосипедист - самокатчик я -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| MastEdm |
|
|||
![]() Master ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 3.12.2005 Где: Москва, МГИУ Репутация: 1 Всего: 2 |
jonie, ну это само собой. Можно тогда так:
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
кстати, есть библиотека TidyLib для разбора html
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| emaxiz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 1.9.2008 Репутация: нет Всего: нет |
Спасиб! а если с конца начинать. чтоб до первого "/" с конца. и до http включительно. и чтобы теги оставались. это как можно сделать?
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |