Регулярное выражение + конец строки [BOOST]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by POS_troi, 12 Jun 2010.

  1. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    Мужики подскажите плиз , ато что-то в тупик зашел.

    Курлом получаю страницу и с нее нужно спарсить некоторые данные

    Кусок страницы
    Code:
    <tr><td colspan="5" class="statdate">2010-06-12</td></tr>[COLOR=DarkRed]Этоесть конец строки[/COLOR]
    <tr><td>&nbsp;</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>&nbsp;</td><td>([a-z]+)</td><td>([0-9]+)</td><td>([0-9]+)</td><td>([0-9//.]+) р.</td></tr>
    З.Ы. Пробывал \r , \n и их комбинации
     
  2. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    (\r\n)*

    нормально парсит конец строки. проверяй в hex редакторе, точно там нужные байты?

    А на счет одного запроса - не обязательно. Часто писали что лучше делать целевые регулярки, чем комбайн.
     
  3. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    Буст не желает парсить таким образом.

    Одним запросом в моем случае удобнее, а несколькими много лишнего кода, ну буду парсить пораздельности =/
     
  4. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    почему лишний. делаешь для каждого типа текста свой метод парса. в итоге в главном меотде будет типа parseTags(...); parseEndLines(...); parsData(...); return result;
     
  5. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    Да и так прийдется делать отдельные парсеры для данных.

    Ща сижу думаю алгоритм как это все красиво потом в табличку запихнуть =)

    З.Ы. Лучше бы я все это на перле или php написал .


    Брррр.. нельзя писать под градусом. Криво но зато работает =))

    PHP:

    string GetClickAndSumm
    (string data)
    {
        
    boost::match_flag_type flags boost::match_default;
        
    std::string::const_iterator startend ;
        
    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>&nbsp;</td><td>([a-z]+)</td><td>([0-9]+)</td><td>([0-9]+)</td><td>([0-9//.]+) р.</td></tr>");
        
    string str(data);
        
    boost::smatch whatDatewhatSumm;

        
    lstrcat(OutData,"========================================================================\n");
        
    lstrcat(OutData,"|    Date      |   Profile   |   PopUnder  |  ClickUnder  |    Summa    \n");
        
    lstrcat(OutData,"|--------------+-------------+-------------+--------------+------------|\n");

        while((
    boost::regex_search(startendwhatDateexpressionDateflags))&&(boost::regex_search(startendwhatSummexpressionSummflags)))
        {
       

      
    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);
    }

     
    #5 POS_troi, 12 Jun 2010
    Last edited: 12 Jun 2010