Название: И снова QRegExp Отправлено: 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"> </p></td> </tr> <tr> <td width="100%" align="center"><p class="simple"> </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"> </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"> </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"> </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ий день бьюсь и никак не получается :-[ Название: Re: И снова QRegExp Отправлено: _OLEGator_ от Октябрь 23, 2009, 13:12 Ну если в таком виде поставлен вопрос, что надо искать не только в теге <img>, но и в <tr background="modules/orehtNews/bg.gif">, то просто ищи по регулярному выражению "(.jpg | .png | .gif)" и от позиции вхождения влево и вправо ищи кавычки (одинарные и двойные по необходимости) и получится нужный текст.
Название: Re: И снова QRegExp Отправлено: zenden от Октябрь 23, 2009, 13:17 Кавычек может и не быть :) В этом самая трудность (а также урезанные возможности кутешного регэкспа по сравнению с другими реализациями)... а если с кавычками, то такой регексп пишется за 5 секунд
Название: Re: И снова QRegExp Отправлено: kenny112 от Октябрь 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(); Название: Re: И снова QRegExp Отправлено: _OLEGator_ от Октябрь 23, 2009, 13:31 ищи с точкой: (.jpg | .png | .gif)
ну и без кавычек можно обойтись - слева ищешь =, а справа пробел или /> Название: Re: И снова QRegExp Отправлено: zenden от Октябрь 23, 2009, 13:42 Цитировать to zenden вот похоже мне с двойными кавычками подошло бы.. Код
Название: Re: И снова QRegExp Отправлено: kenny112 от Октябрь 23, 2009, 13:52 ищи с точкой: (.jpg | .png | .gif) Вот я нашел позицию где стоит jpg png или gif, как организовать поиск влево с этой позиции? И можно ли задать так, чтобы Qregexp находил ближайшие кавычки к расширению?ну и без кавычек можно обойтись - слева ищешь =, а справа пробел или /> Название: Re: И снова QRegExp Отправлено: _OLEGator_ от Октябрь 23, 2009, 13:56 zenden написал выше - вроде работает как надо, проверь...
Название: Re: И снова QRegExp Отправлено: kenny112 от Октябрь 23, 2009, 14:00 to _OLEGator_
Ага, не увидел :Dспасибо за помощь to zenden Спасибо большое, помогло :D :D |