C++ Builder и регулярные выражения

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Gin, 16 Apr 2010.

  1. Gin

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

    Joined:
    11 Sep 2008
    Messages:
    133
    Likes Received:
    7
    Reputations:
    4
    Не знал куда запостить вроде тема и к С++ относиться и к Delphi так что создал тему.

    Вообщем проблема такого характера подключил к своему проекту curl получаю страничку её нужно распарсить, ну думаю регулярки же должны быть, нахожу компонент TRegExpr он соответсвенно под Delphi подключаю к проекту запускаю компиляцию, компилятор создает заголовочный файл, подключаю его, вроде все окей работает, но ввожу регулярные выражения ничего не находит.

    Кто сталкивался с проблемой может есть либо более лучшие решения чем TRegExpr или если несложно выложить свой рабочий простой пример.
     
  2. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Код в студию. Этот класс замечательно работает
     
  3. Gin

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

    Joined:
    11 Sep 2008
    Messages:
    133
    Likes Received:
    7
    Reputations:
    4
    Code:
    
      HINSTANCE cl = NULL;
    if( ( cl = LoadLibrary( "libcurl.dll" ) ) == NULL )
    MessageBox(NULL, "I can't load libcurl","ERROR", 0);
    
    TRegExpr *RegExpr = new TRegExpr;
    String cookiefile;
    CURL *curl;
    String table;
    String url;
    curl = curl_easy_init();
    url=Edit1->Text;
    if(url=="")
    url="mail.yahoo.com";
    if(curl) {
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,Writer);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA,&table);
    curl_easy_setopt(curl, CURLOPT_URL,url);
    curl_easy_setopt(curl, CURLOPT_HEADER , 1 );
    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookiefile);
    curl_easy_setopt(curl, CURLOPT_COOKIEJAR, cookiefile);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST,  2);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_easy_perform(curl);
    curl_easy_cleanup(curl);
    
    RegExpr->Expression="#\<meta(.*?)\>#";
    
    if(RegExpr->Exec(table))
    Label1->Caption =RegExpr->ErrorMsg(RegExpr->LastError());
    
    Label1->Caption =RegExpr->Match[0];
    
    }
    FreeLibrary(cl);
    }
    
    Может дело в регулярках т.к. писал регулярки как в php могу предположить что синтаксис здесь другой используеться.
     
  4. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    С++ не знаю. Но вот вроде Exec возвращает тру если выражение найдено,
    у тебя получается если найдено то
    Label1->Caption =RegExpr->ErrorMsg(RegExpr->LastError()) ?
    Дай мне пример того что находится в table я составлю рабочую регулярку и проверим
     
    1 person likes this.
  5. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Решетки убери.
     
    1 person likes this.
  6. Gin

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

    Joined:
    11 Sep 2008
    Messages:
    133
    Likes Received:
    7
    Reputations:
    4
    Как всегда дъявол кроеться в мелочах =)
    Спасиб mailbrush, спасиб GhostOnline.

    Не могли бы скинуть полезные статьи по теме (может заволялись где нить в закромах), что в случае чего не плодить топиков.
     
  7. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Документация на русском http://www.autocombats.info/files/regexp/index.html
     
  8. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Зачем регулярки? Методов Delete и SetLength класса AnsiString недостаточно?