Мужики подскажите плиз , ато что-то в тупик зашел. Курлом получаю страницу и с нее нужно спарсить некоторые данные Кусок страницы Code: <tr><td colspan="5" class="statdate">2010-06-12</td></tr>[COLOR=DarkRed]Этоесть конец строки[/COLOR] <tr><td> </td><td>default</td><td>0</td><td>29</td><td>2.0826 р.</td></tr> По отдельности распарсить нет проблем но вот хочется одним запросом и что-то не догоню как поймать конец строки - точнее как в регулярке его обозначить. Допустим есть регулярка Code: <tr><td colspan=\"5\" class=\"statdate\">([0-9//-])</td></tr>[COLOR=DarkRed]Что впихнуть сюда?[/COLOR]<tr><td> </td><td>([a-z]+)</td><td>([0-9]+)</td><td>([0-9]+)</td><td>([0-9//.]+) р.</td></tr> З.Ы. Пробывал \r , \n и их комбинации
(\r\n)* нормально парсит конец строки. проверяй в hex редакторе, точно там нужные байты? А на счет одного запроса - не обязательно. Часто писали что лучше делать целевые регулярки, чем комбайн.
Буст не желает парсить таким образом. Одним запросом в моем случае удобнее, а несколькими много лишнего кода, ну буду парсить пораздельности =/
почему лишний. делаешь для каждого типа текста свой метод парса. в итоге в главном меотде будет типа parseTags(...); parseEndLines(...); parsData(...); return result;
Да и так прийдется делать отдельные парсеры для данных. Ща сижу думаю алгоритм как это все красиво потом в табличку запихнуть =) З.Ы. Лучше бы я все это на перле или php написал . Брррр.. нельзя писать под градусом. Криво но зато работает =)) PHP: string GetClickAndSumm(string data) { boost::match_flag_type flags = boost::match_default; std::string::const_iterator start, end ; start = data.begin(); end = data.end(); char OutData[65000] , temp[1024]; ZeroMemory(OutData,65000); ZeroMemory(temp,1024); boost::regex expressionDate("<tr><td colspan=\'5\' class=\'statdate\'>([0-9//-]+)</td></tr>"); boost::regex expressionSumm("<tr><td> </td><td>([a-z]+)</td><td>([0-9]+)</td><td>([0-9]+)</td><td>([0-9//.]+) р.</td></tr>"); string str(data); boost::smatch whatDate, whatSumm; lstrcat(OutData,"========================================================================\n"); lstrcat(OutData,"| Date | Profile | PopUnder | ClickUnder | Summa \n"); lstrcat(OutData,"|--------------+-------------+-------------+--------------+------------|\n"); while((boost::regex_search(start, end, whatDate, expressionDate, flags))&&(boost::regex_search(start, end, whatSumm, expressionSumm, flags))) { lstrcat(OutData,"| "); sprintf(temp,string(whatDate[1]).c_str()); lstrcat(OutData,temp); lstrcat(OutData," "); sprintf(temp,string(whatSumm[1]).c_str()); lstrcat(OutData,temp); lstrcat(OutData," "); sprintf(temp,string(whatSumm[2]).c_str()); lstrcat(OutData,temp); lstrcat(OutData," "); sprintf(temp,string(whatSumm[3]).c_str()); lstrcat(OutData,temp); lstrcat(OutData," "); sprintf(temp,string(whatSumm[4]).c_str()); lstrcat(OutData,temp); lstrcat(OutData,"p. \n"); lstrcat(OutData,"|--------------+-------------+-------------+--------------+------------|\n"); start = whatDate[0].second; flags |= boost::match_prev_avail; flags |= boost::match_not_bob; } return string(OutData); }