2017-01-14 17 views
0

が、私は成功し、次のファイル名と一致するhttp://www.regexpal.com/C正規表現

([A-Z]{1}[a-z]+)+([_]{1}([A-Z]{1}[a-z]+)+)+[.][a-z]+ 

で次の正規表現をテストしてみた一致しない:私は、次のCで正規表現を実装

Butter_Butter.jpg  
JavaPiebald_Java_Piebald.jpg  
LowWhitePied_Pied.jpg 
Piebald_Piebald.jpg 
SpinnerBlast_Spider_Pinstripe_Pastel.jpg 
Caramel_Caramel.jpg 
LightningPied_Pied_Axanthic.jpg 
Pastel_Pastel.jpg  
Spider_Spider.jpg  
Spinner_Spider_Pinstripe.jpg 

コード、一致するものはありません:

#define COLLECTION_REGEX "([A-Z]{1}[a-z]+)+([_]{1}([A-Z]{1}[a-z]+)+)+[.][a-z]+" 

int is_valid_filename(char *filename) 
{ 
    regex_t regex; 
    int i, match; 
    char msgbuf[100]; 

    match = 1; 
    i = regcomp(&regex, COLLECTION_REGEX, 0); 

    if (i) 
    { 
      perror("Could not compile regex"); 
    } 
    else 
    { 
      match = regexec(&regex, filename, 0, NULL, 0); 

      if (!match) 
      { 
        puts("Match"); 
      } 
      else if (match == REG_NOMATCH) 
      { 
        puts("No match"); 
      } 
      else 
      { 
        regerror(match, &regex, msgbuf, sizeof(msgbuf)); 
        puts(msgbuf); 
      } 
    } 

    regfree(&regex); 

    return match; 
} 

以降の実行:

./a.out 
No match 
No match 
No match 
No match 
No match 
No match 
No match 
No match 
No match 
No match 

正規表現は、私はこれらの結果を取得しています理由として確信がもてない、正しい表示されます。 GDBから


出力:ジョナサン・レフラーへ

Breakpoint 1, is_valid_filename (filename=0x609050 "Piebald_Piebald.jpg") at crp-web-builder.c:76 
76      match = regexec(&regex, filename, 0, NULL, 0); 
(gdb) continue 
Continuing. 
No match 

Breakpoint 1, is_valid_filename (filename=0x609460 "LightningPied_Pied_Axanthic.jpg") at crp-web-builder.c:76 
76      match = regexec(&regex, filename, 0, NULL, 0); 
(gdb) continue 
Continuing. 
No match 

Breakpoint 1, is_valid_filename (filename=0x609870 "SpinnerBlast_Spider_Pinstripe_Pastel.jpg") at crp-web-builder.c:76 
76      match = regexec(&regex, filename, 0, NULL, 0); 
(gdb) continue 
Continuing. 
No match 
+1

正規どう表現マッチングライブラリーを使用していますか? – ffledgling

+2

ERE(拡張正規表現)マッチ​​ングを得るには、 'reg_comp'にゼロ以外の引数を指定する必要があります。 –

答えて

1

感謝。ライン:

i = regcomp(&regex, COLLECTION_REGEX, 0); 

は次のようになります。

i = regcomp(&regex, COLLECTION_REGEX, REG_EXTENDED);