Russian Qt Forum
Ноябрь 26, 2024, 01:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: И снова QRegExp  (Прочитано 4886 раз)
kenny112
Гость
« : Октябрь 23, 2009, 08:13 »

Доброго времени суток Улыбающийся
Я решил написать программу - грабер для страницы, то есть на вход я даю ссылку, а на выходе в папку сохраняются картинки с этой страницы.
И вот есть такой момент - разбор HTML на предмет ссылок на jpg, png, gif и т.д. файлы.
Подскажите как написать регулярное выражение, чтобы эти самые ссылки выдергивались. Вот например часть кода страницы
Цитировать
<td width="100%" align="center"><img src="modules/orehtNews/oktober2009/bbkproig.jpg" /></td>   </tr>   <tr>      <td width="100%" align="center"><p class="simple">Проигрыватель BBK DVD DV318SI/ BBK DVD DV319SI/ BBK DVD DV412SI Караоке/ BBK DVD DV414SI Караоке/ BBK DVD DV610SI сер./ BBK DVD DV610SI черн./ BBK DVD DV611SI/ BBK DVD DV615SI/ BBK DVD DV625SI сер./ BBK DVD DV625SI черн./ BBK DVD DV627SI сер./ BBK DVD DV917HD сер. от 1426/1529/2719/2770/1847/1847/1919/1950/2001/2001/2021/2042 руб./шт.</p></td>   </tr>   <tr>      <td width="100%" align="center"><p class="simple">&nbsp;</p></td>   </tr>   <tr>      <td width="100%" align="center"><p class="simple">&nbsp;</p></td>   </tr>   <tr>      <td width="100%" align="center"><img src="modules/orehtNews/oktober2009/bbkmikr.jpg" /></td>   </tr>   <tr>      <td width="100%" align="center"><p class="simple">Универсальный динамический микрофон BBK CM-115/ BBK CM-111 от 102/75 руб./шт.</p></td>   </tr>   <tr>      <td width="100%" align="center"><p class="simple">&nbsp;</p></td>   </tr>   <tr background="modules/orehtNews/bg.gif">      <td width="100%" align="center"><p class="simple"><font color="#306246" size="+1"><b>САНТЕХНИЧЕСКИЕ ИЗДЕЛИЯ:</b></p></td>   </tr>   <tr>      <td width="100%" align="center"><p class="simple">&nbsp;</p></td>   </tr>   <tr>      <td width="100%" align="center"><img src="modules/orehtNews/oktober2009/kollektor.jpg" /></td>   </tr>   <tr>      <td width="100%" align="center"><p class="simple">Коллектор 3/4'', евроцанга, с 2-мя кранами, красный, латунь СК 093H (2 red)/с 2-мя кранами, синий, латунь CK 093H (2 blue)/с 3-мя кранами, красный, латунь CK 093H (3 red)/с 3-мя кранами, синий, латунь CK 093H (3 blue)/с 4-мя кранами, красный, латунь CK 093H (4 red)/с 4-мя кранами, синий, латунь CK 093H (4 blue)/с 5-ю кранами, красный ГР 453/с 5-ю кранами, синий ГР 453 от 239,8/239,8/324,7/324,7/414,7/414,7/447,2/447,2 руб./шт.</p></td>   </tr>   <tr>      <td width="100%" align="center"><p class="simple">&nbsp;</p></td>   </tr>   <tr>      <td width="100%" align="center"><img src="modules/orehtNews/oktober2009/amerpryam.jpg" /></td>   </tr>   <tr>      <td width="100%" align="center"><p class="simple">Соединитель «американка» прямой, для П/С 1/2"х3/4",
тут например желательно выдернуть modules/orehtNews/oktober2009/bbkproig.jpg.
Ну и бывают страницы где ссылка представлена в полном формате http://path/*.jpg
Помогите пожалуйста, уже 3ий день бьюсь и никак не получается Обеспокоенный
Записан
_OLEGator_
Гость
« Ответ #1 : Октябрь 23, 2009, 13:12 »

Ну если в таком виде поставлен вопрос, что надо искать не только в теге <img>, но и в <tr background="modules/orehtNews/bg.gif">, то просто ищи по регулярному выражению "(.jpg | .png | .gif)" и от позиции вхождения влево и вправо ищи кавычки (одинарные и двойные по необходимости) и получится нужный текст.
Записан
zenden
Гость
« Ответ #2 : Октябрь 23, 2009, 13:17 »

Кавычек может и не быть Улыбающийся В этом самая трудность (а также урезанные возможности кутешного регэкспа по сравнению с другими реализациями)... а если с кавычками, то такой регексп пишется за 5 секунд
Записан
kenny112
Гость
« Ответ #3 : Октябрь 23, 2009, 13:27 »

Ну если в таком виде поставлен вопрос, что надо искать не только в теге <img>, но и в <tr background="modules/orehtNews/bg.gif">, то просто ищи по регулярному выражению "(.jpg | .png | .gif)" и от позиции вхождения влево и вправо ищи кавычки (одинарные и двойные по необходимости) и получится нужный текст.
Хм.. а как влево можно делать поиск?

to zenden  вот похоже мне с двойными кавычками подошло бы..

Цитировать
   QRegExp RX("(jpg|png|gif)");
   QString str;
   str=file->readAll();
   int pos=0;
   QStringList list;
   while((pos = RX.indexIn(str, pos)) != -1)
   {
      list<<RX.cap(0);
      qDebug()<<RX.cap(0);
      pos+=RX.matchedLength();
   }
   file->close();
Записан
_OLEGator_
Гость
« Ответ #4 : Октябрь 23, 2009, 13:31 »

ищи с точкой: (.jpg | .png | .gif)
ну и без кавычек можно обойтись - слева ищешь =, а справа пробел или />
Записан
zenden
Гость
« Ответ #5 : Октябрь 23, 2009, 13:42 »

Цитировать
to zenden  вот похоже мне с двойными кавычками подошло бы..

Код
C++ (Qt)
QRegExp RX("\"([^\"]*\\.(gif|jpeg|jpg))\""); // или "[\"']([^\"']*\\.(gif|jpeg|jpg))[\"']"
RX.setMinimal(true);
RX.setCaseSensitivity(Qt::CaseInsensitive);
 
 
« Последнее редактирование: Октябрь 23, 2009, 13:44 от zenden » Записан
kenny112
Гость
« Ответ #6 : Октябрь 23, 2009, 13:52 »

ищи с точкой: (.jpg | .png | .gif)
ну и без кавычек можно обойтись - слева ищешь =, а справа пробел или />
Вот я нашел позицию где стоит jpg png или gif, как организовать поиск влево с этой позиции? И можно ли задать так, чтобы Qregexp находил ближайшие кавычки к расширению?
Записан
_OLEGator_
Гость
« Ответ #7 : Октябрь 23, 2009, 13:56 »

zenden написал выше - вроде работает как надо, проверь...
Записан
kenny112
Гость
« Ответ #8 : Октябрь 23, 2009, 14:00 »

to _OLEGator_
Ага, не увидел :Dспасибо за помощь
to zenden
Спасибо большое, помогло Веселый Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.216 секунд. Запросов: 21.