2009-06-02 5 views

답변

1
거친 코드에 대한 죄송합니다

,하지만 난 서둘러입니다 ...

pcre* re; 
    const char *error; 
    int erroffset; 
    char* subject = txt; 
    int ovector[3]; 
    int subject_length = strlen(subject); 
    int rc = 0; 


    re = pcre_compile(
    "\\w+",    /* the pattern */ 
    PCRE_CASELESS|PCRE_MULTILINE,     /* default options */ 
    &error,    /* for error message */ 
    &erroffset,   /* for error offset */ 
    NULL);    /* use default character tables */ 

    char* pofs = subject; 
    while ( rc >= 0 ) { 
    rc = pcre_exec(
     re,     /* the compiled pattern */ 
     NULL,     /* no extra data - we didn't study the pattern */ 
     subject,    /* the subject string */ 
     subject_length,  /* the length of the subject */ 
     0,     /* start at offset 0 in the subject */ 
     0,     /* default options */ 
     ovector,    /* output vector for substring information */ 
     3);   /* number of elements in the output vector */ 

    /* 
    if (rc < 0) { 
     switch(rc) { 
     case PCRE_ERROR_NOMATCH: printf("No match\n"); break; 

     // Handle other special cases if you like 

     default: printf("Matching error %d\n", rc); break; 
     } 
     pcre_free(re);  // Release memory used for the compiled pattern 
     return; 
    } 
    */ 

    /* Match succeded */ 

    if ( rc >= 0 ) { 
     pofs += ovector[1]; 

     char *substring_start = subject + ovector[0]; 

     // do something with the substring 

     int substring_length = ovector[1] - ovector[0]; 

     subject = pofs; 
     subject_length -= ovector[1]; 
    } 
    } 
1

std::string wordstring = "w1, w2, w3"; 
std::string word; 
pcrecpp::StringPiece inp_w(wordstring); 
pcrecpp::RE w_re("(\\S+),?\\s*"); 
std::vector outwords; 

while (w_re.FindAndConsume(&inp_w, &word)) { 
    outwords.push_back(word); 
} 
+0

는이 테스트 적이 있습니까? 쉼표를 마치 단어의 일부처럼 짝을 맞추기를 기대합니다. [ "w1", "w2", "w3"] –

관련 문제