La bibliothèque standard C ne fournit aucun support pour les expressions régulières.
Vous devrez soit télécharger une bibliothèque RegEx en C (une très courante est PCRE), ou le faire en boucle (plus facile dans le cas présent, puisque les expressions recherchées sont toutes des caractères uniques, donc pas de retour en arrière) .
L'approche en boucle ressemblerait à quelque chose comme:
int main(int argc, char ** argv) {
char* name = argv[1];
// remove anything that isn't [a-z0-9_]
char strippedName[200];
int iIn, iOut; // subscript in Name and StrippedName respectively
iIn = iOut = 0;
while (name[iIn] != '\0' && iOut < (sizeof(strippedName) + 1)) {
// some condition defining a desirable character
// BTW, this condition should actually be
// if (islower(name[iIn]) || isdigit(name[iIn] || name[iIn] == '_')
// to match the OP's requirement exactly
if (isalnum(name[iIn]) || name[iIn] == '_')
strippedName[iOut++] = name[iIn];
iIn++;
}
strippedName[iOut++] = '\0';
printf("%s", strippedName);
}
D'autres expressions régulières dans la langue C (autre que PCRE mentionné plus haut):
Cela ressemble à des devoirs, pourquoi ne pas essayer d'abord une solution? – Tom
Je suis parfaitement OK en marchant la chaîne et en remplaçant les caractères, puis en compactant les zéros, mais j'espérais quelque chose d'un peu plus maintenable. –