PDA

Просмотр полной версии : C++ Builder и регулярные выражения


Gin
16.04.2010, 16:14
Не знал куда запостить вроде тема и к С++ относиться и к Delphi так что создал тему.

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

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

GhostOnline
16.04.2010, 16:16
Код в студию. Этот класс замечательно работает

Gin
16.04.2010, 16:29
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 могу предположить что синтаксис здесь другой используеться.

GhostOnline
16.04.2010, 16:35
С++ не знаю. Но вот вроде Exec возвращает тру если выражение найдено,
у тебя получается если найдено то
Label1->Caption =RegExpr->ErrorMsg(RegExpr->LastError()) ?
Дай мне пример того что находится в table я составлю рабочую регулярку и проверим

mailbrush
16.04.2010, 16:36
Решетки убери.

Gin
16.04.2010, 16:39
Как всегда дъявол кроеться в мелочах =)
Спасиб mailbrush, спасиб GhostOnline.

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

GhostOnline
16.04.2010, 16:45
Документация на русском http://www.autocombats.info/files/regexp/index.html

M_script_
16.04.2010, 17:57
Зачем регулярки? Методов Delete и SetLength класса AnsiString недостаточно?