Форумы портала PHP.SU » » Программирование на C++ » regex траблы

Страниц (1): [1]
 

1. daglas1 - 25 Января, 2013 - 15:16:58 - перейти к сообщению
Всем привет

static char* szHeader = "GET /demo HTTP/1.1\r\n"
"Upgrade: WebSocket\r\n"
"Connection: Upgrade\r\n"
"Sec-WebSocket-Key2: 4 @1 46546xW%0l 1 5\r\n"
"Host: example.com\r\n"
"Sec-WebSocket-Key1: 12998 5 Y3 1 .P00\r\n"
"Origin: http://example.com\r\n"
"WebSocket-Protocol: sample\r\n"
"\r\n"
"^n:ds[4U";


Нужно из поля Sec-WebSocket-Key1: вытащить значение . Т.е. 12998 5 Y3 1 .P00
Я делаю так

int WsciService::getHeaders(char* szHeaders, WEBSOCKET_HEADER* wsHeaderInOut){
if ( szHeaders==(char*)NULL || wsHeaderInOut==(WEBSOCKET_HEADER*)NULL ) return -1;
char* szKey1Pattern = "(Sec-WebSocket-Key1Улыбка.*";
//char* szKey1Pattern = "(Sec-WebSocket-Key1Улыбка[[:s:]](.+\\r\\n)";
//char* szKey1Pattern = "(Sec-WebSocket-Key1Улыбка([:print:])(.+\\r\\n)";
//char* szKey1Pattern = "(Sec-WebSocket-Key1Улыбка(.*)(.+\\r\\n)";

//char* p = strstr(szHeaders, "Sec-WebSocket-Key1:");
//if ( p!=(char*)NULL ) printf("%s", p);

regex_t regex;
int rc = regcomp(&regex, szKey1Pattern, 0);
if ( rc==0 ) {
regmatch_t pm[1];
rc = regexec(&regex, szHeaders, 1, pm, 0);
if ( rc==0 ) {
::memcpy(wsHeaderInOut->szK1, szHeaders + pm[0].rm_so, pm[0].rm_eo - pm[0].rm_so);
printf("Begin: %d\nEnd: %d\n", pm[0].rm_so, pm[0].rm_eo);
} else {
char szError[1024];
regerror(rc, &regex, szError, sizeof(szError));
printf("Exec error: %s\n", szError);
}
} else {
char szError[1024];
regerror(rc, &regex, szError, sizeof(szError));
printf("Compile error: %s\n", szError);
}
regfree(&regex);


Структура WEBSOCKET_HEADER это просто тесктовые поля
Перепробовал много вариантов, получается ерунда

 

Powered by ExBB FM 1.0 RC1