2013-12-13 3 views
0

Я пытаюсь сделать регулярное выражение для оценки последовательности чисел, начинающихся с подчеркивания следующим образом: _201312 У меня проблемы с числовой частью; Я всегда получаю сообщение REG_NOMATCH. Вот код:Регулярное выражение C++ с regexec() не соответствует

#include <regex.h> 

int result_exp,flag_buffer=0; 
regex_t rx_t; 
regmatch_t match[10]; 
result_exp = regcomp(&rx_t,"^[0-9]+$",REG_NOSUB); // 
if(result_exp==0){ 
    printf("result_exp es 0\n"); 
}else if(result_exp == REG_BADBR){ 
    printf("REG_BADBR\n"); 
}else if(result_exp == REG_BADPAT){ 
    printf("REG_BADPAT\n"); 
} 
result_exp = regexec(&rx_t, tableName.c_str(), 0, 0, 0); 
if(result_exp==0){ //match 
    flag_buffer=1; 
}else if(result_exp == REG_NOMATCH){ 
    printf("REG_NOMATCH\n"); 
} 

Я пытался с этим выражением тоже:

result_exp = regcomp(&rx_t,"[[:digit:]]+",REG_NOSUB); 

Я использовал флаг REG_NOSUB, а затем у меня нет, и результат был тот же.

У вас есть идея?

Благодаря

+0

что насчет _ это должно быть в регулярное выражение справа, так как вы начинаете с «^»? Как изменить регулярное выражение на "^ _ [0-9] + $"? – hetepeperfan

+1

Это выглядит как обычный C мне, почему C++ в названии и как тег? –

ответ

1

Попробуйте это

regmatch_t m[1]; 
    regex_t r; 

    if (regcomp(&r,"^_[0-9]+", REG_EXTENDED) != 0) { 
     printf("failed create regexp\n"); 
    } 

    regexec(&r, "_2211231", 1, m, 0); 
Смежные вопросы