0
ich den folgenden regulären Ausdruck bei http://www.regexpal.com/C Regex Nicht Passende
([A-Z]{1}[a-z]+)+([_]{1}([A-Z]{1}[a-z]+)+)+[.][a-z]+
getestet haben, die erfolgreich die folgenden Dateinamen übereinstimmt:
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
Als ich den regulären Ausdruck in der folgenden C implementieren code, ich erhalte keine Übereinstimmungen:
#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(®ex, COLLECTION_REGEX, 0);
if (i)
{
perror("Could not compile regex");
}
else
{
match = regexec(®ex, filename, 0, NULL, 0);
if (!match)
{
puts("Match");
}
else if (match == REG_NOMATCH)
{
puts("No match");
}
else
{
regerror(match, ®ex, msgbuf, sizeof(msgbuf));
puts(msgbuf);
}
}
regfree(®ex);
return match;
}
anschließende Ausführung:
./a.out
No match
No match
No match
No match
No match
No match
No match
No match
No match
No match
Der reguläre Ausdruck korrekt erscheint, ich bin unsicher, warum ich diese Ergebnisse bin zu erhalten.
Ausgabe von GDB:
Breakpoint 1, is_valid_filename (filename=0x609050 "Piebald_Piebald.jpg") at crp-web-builder.c:76
76 match = regexec(®ex, 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(®ex, 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(®ex, filename, 0, NULL, 0);
(gdb) continue
Continuing.
No match
Welche Bibliothek für reguläre Ausdrücke übereinstimmen, sind Sie mit? – ffledgling
Sie müssen ein Argument ungleich Null an 'reg_comp' übergeben, um den ERE-Vergleich (erweiterter regulärer Ausdruck) zu erhalten. –