Поиск регулярками c либой pcre

вот пишу поиск по регулярный выражениям.. написал функцию.. вот только она дает нулевое совпадение, а не именно то что ищем
#include <stdio.h>#include <pcre.h>#include <string.h>//---------------------------------------------------------------------------------int * getStat (char* pattern, char* subject) {    pcre *f;    pcre_extra *f_ext;        const char *errstr;    int errchar;        int vector[50];    int vecsize=50;    const char *buff2;        int pairs;    int i,j;        int *res;    if((f=pcre_compile(pattern,PCRE_CASELESS|PCRE_MULTILINE,&errstr,&errchar,NULL))==NULL) {     printf("Error: %s\ncharacter N%i\ntemplate:%s\n",errstr,errchar,pattern);     return NULL;    }    else {        if((pairs=pcre_exec(f,NULL,subject,strlen(subject),0,PCRE_NOTEMPTY,vector,vecsize))<0){         printf("Error! Number: %i\n",pairs);        }      else {                         f_ext=pcre_study(f,0,&errstr);            j=0;                                  while((pairs=pcre_exec(f,f_ext,subject,strlen(subject),j,PCRE_NOTEMPTY,vector,vecsize))>=0){                pcre_get_substring(subject,vector,pairs,0,&buff2);                printf("%s\n",buff2);                pcre_free_substring(buff2);                j=vector[1]+1;             }                       }                       }}    //-----------------------------------------------------------------------------------------------------int main(int argc, char* argv[]){    int *tmp;        tmp=getStat("<b>([0-9]+)<\\/b>", "asdfsa: sdfg<b>2</b> sfgdfasdasf<b>0</b> <br>");/    return 0;}
дает на выходе 
20
как сделать что бы получать именно результат, а не нулевой шаблон?
20
p.s. функция не дописана поэтому и не возвращает массив инт * p.p.s. почему у меня код не подсвечивает? о_0 выделил в \[code=cpp\]
2 ответа

вообщем обошел проблему таким методом
//---------------------------------------------------------------------------------int * getStat (char* pattern, char* subject) {    pcre *f;    pcre_extra *f_ext;        const char *errstr;    int errchar;        int vector[50];    int vecsize=50;    const char *buff2;        int pairs;    int i,j,z;        int *res;    if((f=pcre_compile(pattern,PCRE_CASELESS|PCRE_MULTILINE,&errstr,&errchar,NULL))==NULL) {     printf("Error: %s\ncharacter N%i\ntemplate:%s\n",errstr,errchar,pattern);     return NULL;    }    else {        if((pairs=pcre_exec(f,NULL,subject,strlen(subject),0,PCRE_NOTEMPTY,vector,vecsize))<0){         printf("Error! Number: %i\n",pairs);        }      else {                         f_ext=pcre_study(f,0,&errstr);            j=0;            z=0;                        res = new int(4);          while((pairs=pcre_exec(f,f_ext,subject,strlen(subject),j,PCRE_NOTEMPTY,vector,vecsize))>=0){                pcre_get_substring(subject,vector,pairs,0,&buff2);                                int s=0;                int p=1;                for (int k=strlen(buff2)-5; k>=3; k--){                    s+=((int)buff2[k]-0x30)*p;                    p*=10;                }                                  res[z]=s;//                printf("[%i] - %i\r\n",z, res[z]);                                z++;                pcre_free_substring(buff2);                j=vector[1]+1;             }          return res;             }                       }}    
но это решение лишь для конкретного случая.. мб кто-то знает как эта проблема должна правильно решатся, для получения сразу норм результат от регулярок..


([0-9]+)<\\/b>ищи совпавший паттерн в первой регэксповой группе. pcre не юзал, так что как там оно делается не в курсе.